学习了数据分析可视化的基本流程,对Matplotlib绘图工具进行实际操作。加深绘图函数的理解。
基础图形
1.绘制直方图:可直观的传递数据的分布情况。函数:plt.hist(data, bins)
import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline #数据源 HeightList = [168, 155, 182, 170 , 173, 161, 155, 173, 176, 181, 166 ,172, 170] #设定区间 Sec = range(150, 191, 5) #绘制直方图 plt.hist(HeightList, bins=Sec) plt.show()
效果图
2.绘制条形图:展现同类数据的大小以及数据之间的差别。函数:plt.bar(data,datatype)
import matplotlib as mpl import matplotlib.pyplot as plt classes = ["一班", "二班", "三班"] scores = [70, 80, 60] #设置字体使之支持中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] #直方图 plt.bar(classes,scores) #设置条形图的显示文本 for i in range(3): plt.text(i, scores[i], scores[i]) #设置标题 plt.title("班级的成绩条形图") #设置横坐标 plt.xlabel("班级") #设置纵坐标 plt.ylabel("成绩(分)") plt.show()
效果图
3.绘制折线图:通常显示随时间变化的连续数据,因此非常适用显示数据在周期内的趋势。函数:plt.plot(X,Y)
import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline #年份,实际时间区间[2005,2019) year = range(2005, 2020) #身高 height = [168, 155, 182, 170 , 173, 161, 155, 173, 176, 181, 166 ,172, 170, 175, 178] #绘制折线图 plt.plot(year, height) plt.show()
效果图
4.绘制饼图:常用于显示一个数据系列中各项的大小和各项总和的比例。函数:plt.pie(data,datatype)
import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline #中文支持 plt.rcParams['font.sans-serif'] = ['SimHei'] #数据种类 NameType = ["房贷", "饮食", "出行", "教育"] #数据值 data = [8000, 2000, 2000, 3000] #绘制饼图,autopct = '%.2f%%',设置显示2位小数,并以%形式显示,%为转义符 plt.pie(data, labels = NameType, autopct = '%1.2f%%')
效果图
5.绘制散点图:是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,据此可以选择合适的函数对数据点进行拟合。函数:plt.scatter(data_X, data_Y)
import matplotlib as mlp import matplotlib.pyplot as plt %matplotlib inline #中文支持 plt.rcParams['font.sans-serif'] = ['SimHei'] data = [[18.9, 10.4], [21.3, 8.7], [19.5, 11.6], [20.5, 9.7], [19.9, 9.4], [22.3, 11.0], [21.4, 10.6], [9.0, 9.4], [10.4, 9.0], [9.3, 11.3],[11.6, 8.5], [11.8, 10.4], [10.3, 10.0], [8.7, 9.5], [14.3, 17.2],[14.1, 15.5], [14.0, 16.5], [16.5, 17.7], [15.1, 17.3], [16.4, 15.0],[15.7, 18.0]] data_X = [item[0] for item in data] data_Y = [item[1] for item in data] #绘制散点图 plt.scatter(data_X, data_Y) plt.title("商品价格与销售量散点图") plt.xlabel("价格(元)") plt.ylabel("销量(千件)") #设置坐标文本 plt.text(10,10,"纸巾") plt.text(16,16,"牙膏") plt.text(21,10,"洗衣液") plt.show()
效果图
6.绘制箱线图:又称为盒须图、盒式图,是一种用作显示一组数据分散情况的统计图,主要用于反映原始数据的特征,主要有展示图值有:上边缘 下边缘 中位数 上四分位数 下四分位数 异常值(点)。函数:plt.boxplot(data)
import matplotlib as mlp import matplotlib.pyplot as plt %matplotlib inline #某班的语文成绩 data = [86.0, 90.0, 89.0, 79.0, 73.0, 91.0, 94.0, 85.0, 86.0, 77.0, 94.0, 88.0, 79.0, 67.0, 87.0, 84.0, 82.0, 71.0, 86.0, 74.0, 86.0, 93.0, 91.0, 85.0, 79.0, 73.0, 81.0, 83.0, 89.0, 90.0] #设置箱线图 plt.boxplot(data) plt.show()
效果图
7.绘制极线图:用于表示极坐标下数据的分布情况,多用于显示具有一点周期性的数据。函数:plt.subplot(111, projection = 'polar').plot(theta, r)
import matplotlib.pyplot as plt %matplotlib inline #极径和角度 #设置极径 r = [1, 2, 3, 4, 5] #pi = 3.141592653589793 #设置角度 theta = [0.0, 1.5707963267948966, 3.141592653589793, 4.71238898038469, 6.283185307179586] #ax = plt.subplot(111, projection = 'polar') #ax.plot(theta, r) #绘制极线图 plt.subplot(111, projection = 'polar').plot(theta, r)
效果图
8.绘制阶梯图:是一种以无规律、间歇性阶跃的方式表达数值变化的方法,它不仅可以像折线图反映数据发展的趋势,还可以反映数据状态的持续时间。函数:plt.step(year, height)
import matplotlib.pyplot as plt %matplotlib inline #年份 year = range(2005, 2020) #某人的仔2005年~2019年身高变化 height = [155, 155, 161, 166, 168, 170, 170, 172, 173, 173, 175, 176, 178, 181, 182] #绘制阶梯图 plt.step(year, height) plt.show()
效果图
高级图形:
1.绘制堆积图:常用于综合展示不同分类的指标趋势以及总和的趋势。函数:plt.bar(datatype, data_y, bottom = data_x, color = 'r', label = 'name')
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #5位学生学号 StuNum = ["001", "002", "003", "004", "005"] #语文成绩 ch = [72, 80, 66, 77, 92] #数学成绩 math = [62, 92, 72, 75, 88] #英语成绩 english = [78, 81, 73, 75, 88] #绘制堆积图 plt.bar(StuNum, ch, color = 'r', label = 'chinese') #在语文成绩之上绘制数学条形图 plt.bar(StuNum, math, bottom = ch, color = 'g', label = 'math') #求出语文和数学各个学生成绩之和 chandmath = [ch[i] + math[i] for i in range(5)] #在语数成绩之和之上绘制英语条形图 plt.bar(StuNum, english, bottom = chandmath, color = 'b', label = 'english') plt.show()
效果图
2.绘制分块图:可将不同数据集分块展示,方便对比同类数据某一具体属性的高低。函数:plt.bar(datatype, data_y, bottom = data_x, color = 'r', label = 'name')
import matplotlib.pyplot as plt %matplotlib inline plt.rcParams['font.sans-serif'] = 'SimHei' NameList = ["语文", "数学", "英语"] #各个班级三科平均成绩 classes1 = [81.4, 83, 87.1] classes2 = [85.6, 87.4, 90] classes3 = [78, 81.2, 86.1] #设置宽度 width = 0.4 #设置一班起始绘图坐标 x = [1, 3, 5] #绘制分块图 plt.bar(x, classes1, label="一班", fc = 'r', width = width) #设置二班起始绘图坐标 x = [1.4, 3.4, 5.4] plt.bar(x, classes2, label="二班", fc = 'g', width = width) #设置三班起始绘图坐标 x = [1.8, 3.8, 5.8] plt.bar(x, classes3, label="三班", fc = 'b', width = width) #设置学科显示坐标 x = [1.4, 3.4, 5.4] plt.xticks(x, NameList) #plt.legend() plt.title("各个班级三科平均成绩") plt.xlabel("学科") plt.ylabel("成绩")
效果图
3.绘制气泡图:可用来展示是三个变量之间的关系。函数:plt.bar(x, data_x, label="name", fc = 'r', width = width)
import matplotlib.pyplot as plt %matplotlib inline plt.rcParams['font.sans-serif'] = 'SimHei' #人群年龄、身高、体重变化情况 #年龄数据 x = [22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0] #身高数据 y = [176.0, 186.0, 164.0, 171.0, 183.0, 194.0, 180.0, 178.0, 190.0, 170.0, 168.0, 192.0, 173.0, 178.0, 181.0, 186.0, 177.0, 187.0, 180.0, 195.0, 179.0, 186.0, 187.0, 190.0, 182.0, 184.0, 176.0, 178.0, 164.0, 185.0, 181.0, 175.0, 173.0, 172.0, 172.0, 169.0, 168.0, 188.0, 168.0, 174.0, 170.0] #体重数据 z = [70.0, 220.0, 50.0, 170.0, 210.0, 270.0, 150.0, 150.0, 360.0, 150.0, 150.0, 120.0, 150.0, 170.0, 170.0, 160.0, 180.0, 460.0, 480.0, 480.0, 490.0, 300.0, 300.0, 250.0, 300.0, 250.0, 350.0, 180.0, 100.0, 250.0, 160.0, 170.0, 160.0, 180.0, 150.0, 150.0, 130.0, 180.0, 150.0, 160.0, 140.0] #绘制气安排 alpha设置透明图,取值区间为[0,1],默认为1,越接近于0越透明 plt.scatter(x, y, s=z, alpha = 0.5)
不设置透明(alpha=1)图效果图
设置透明度为(alpha=0.5)的效果图
分析数据时,有了可视化管理,可直观地观测数据的变化情况,便于分析展现和数据洞察,更易于概括和总结事物的发展规律,以便做出更优的决策。