3.1认识图表常用的辅助元素 坐标轴:分为单坐标轴和双坐标轴,单坐标轴按不同的方向又可分为水平坐标轴和垂直坐标轴 标题:表示图表的说明性文本 图例:用于指出图表中各组图形采用的标识方式 网格:从坐标轴刻度开始的、贯穿绘图区域的若干条线 参考线:标记坐标轴上特殊范围的一条直线 参考区域:标记坐标轴上特殊范围的一块区域 注释文本: 表格:用于强调比较难理解数据的表格 3.2、设置坐标轴的标签、刻度范围和刻度标签 3.2.1设置坐标轴的标签 1、设置x轴的标签:matplotlib中可以直接使用pyplot模块的xlabel()函数设置x轴的标签 函数参数如下: xlabel:表示x轴标签的文本 fontdict:表示控制标签文本样式的字典 labelpad:表示标签与坐标轴边框的距离 2、设置y轴的标签:matplotlib中可以直接使用pyplot模块的ylabel()函数设置y轴的标签
import numpy as np import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False x=np.linspace(-np.pi,np.pi,256,endpoint=True) y1,y2=np.sin(x),np.cos(x) plt.plot(x,y1,x,y2)#设置x轴和y轴的标签 plt.xlabel(“x轴”) plt.ylabel(“y轴”) plt.title(‘2020080603051’) plt.show() 3.2.2、设置刻度范围和刻度标签 1、设置刻度范围 left:表示x轴刻度取值区间的左位数 right:表示x轴刻度取值区间的右位数 emit:表示是否通知限制变化的观察者,默认为True auto:表示是否允许自动缩放x轴,默认为True xmin:表示x轴刻度的最小值 xmax:表示x轴刻度的最大值 2、设置刻度标签 该函数的ticks()参数表示刻度显示的位置列表,它可以设为空列表,以此禁用x轴的刻度,labels表示知道位置刻度的标签列表 Axes对象可以使用set_xticks()或set_yticks()方法分别设置x轴或y轴的刻度线的位置,使用set_xtickkabels()或set_yticklabels()方法分别设置x轴和y轴的刻度标签
import numpy as np import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False x=np.linspace(-np.pi,np.pi,256,endpoint=True) y1,y2=np.sin(x),np.cos(x) plt.plot(x,y1,x,y2) plt.xlabel(“x轴”) plt.ylabel(“y轴”) plt.xlim(x.min()*1.5,x.max()*1.5) plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r’
?
π
-\pi
?π’,r’
?
π
/
2
-\pi/2
?π/2’,r’
0
0
0’,r’
π
/
2
\pi/2
π/2’,r’
π
\pi
π’]) plt.title(‘2020080603051’) plt.show() 3.3、添加标题和图例 3.3.1、添加标题 fontdict:表示控制标题文本样式的字典 loc:表示标题的对齐样式,包括‘left’,‘right’和‘center’三种取值,默认取值为‘center’ pad:表示标题与图标顶部的距离,默认为None 3.3.2、添加图例 图例是一个列举各组图形数据标识方式的方框图,它由图例标识和图例项两个部门构成,其中图例标识是代表各组图形的图案,图例项是与图例标识对应的名称 (1)handles和labels参数 (2)loc参数 (3)bbox_to_anchor参数 (4)ncol参数 (5)title参数 (6)shadow参数 (7)fancybox参数 import numpy as np import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False x=np.linspace(-np.pi,np.pi,256,endpoint=True) y1,y2=np.sin(x),np.cos(x) plt.plot(x,y1,x,y2) plt.xlabel(“x轴”) plt.ylabel(“y轴”) plt.xlim(x.min()*1.5,x.max()*1.5) plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r’
?
π
-\pi
?π’,r’
?
π
/
2
-\pi/2
?π/2’,r’
0
0
0’,r’
π
/
2
\pi/2
π/2’,r’
π
\pi
π’]) lines=plt.plot(x,y1,x,y2) plt.legend(lines,[‘正弦’,‘余弦’],shadow=True,fancybox=True)#绘制图例 #shadow:图例阴影 plt.title(‘2020080603051’) plt.show() 3.3.3、添加参考线 1、绘制axhline()绘制水平参考线 2、使用axvline()绘制垂直参考线 在3.3.2代码后增加以下代码 plt.axvline(x=0,linestyle=’–’) plt.axhline(y=0,linestyle=’–’) 3.3.4、添加参考区域 1、使用axhspan()绘制水平参考区域 2、使用axvspan()绘制垂直参考区域 plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3) plt.axhspan(ymin=0.5,ymax=2.0,alpha=0.3) 3.3.5、添加注释 1、添加指向型注释文本 2、添加无指向型注释文本 代码如下: import numpy as np import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False x=np.linspace(-np.pi,np.pi,256,endpoint=True) y1,y2=np.sin(x),np.cos(x) plt.plot(x,y1,x,y2) plt.xlabel(“x轴”) plt.ylabel(“y轴”) plt.xlim(x.min()*1.5,x.max()*1.5) plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r’
?
π
-\pi
?π’,r’
?
π
/
2
-\pi/2
?π/2’,r’
0
0
0’,r’
π
/
2
\pi/2
π/2’,r’
π
\pi
π’]) lines=plt.plot(x,y1,x,y2) plt.legend(lines,[‘正弦’,‘余弦’],shadow=True,fancybox=True) plt.axvline(x=0,linestyle=’–’) plt.axhline(y=0,linestyle=’–’) plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3) plt.axhspan(ymin=0.5,ymax=2.0,alpha=0.3) plt.annotate(“最小值”,#添加指向型注释文本 xy=(-np.pi/2,-1.0),xytext=(-(np.pi/2),-0.5),arrowprops=dict(arrowstyle=“fancy”)) plt.text(3.10,0.10,“y=sin(x)”,bbox=dict(alpha=0.5))#添加无指向型注释文本 plt.text(3.10,-1.0,“y=con(x)”,bbox=dict(alpha=0.5)) plt.title(‘2020080603051’) plt.show() 3.3.5、添加表格 1、添加自定义样式的表格 cellText:表示表格单元格的数据,是一个二维列表 cellColurs:表示单元格的背景颜色 cellLoc:表示单元格文本的对齐方式,支持‘left’、‘right’和‘center’三种取值 colWidth:表示每列的宽度 rowLabel:表示行标题的文本 rowLoc:表示行标题的对齐方式 colLoc:表示列标题的对齐方式 loc:表示表格与绘图区域的对齐方式
import numpy as np import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False x=np.linspace(-np.pi,np.pi,256,endpoint=True) y1,y2=np.sin(x),np.cos(x) plt.plot(x,y1,x,y2) plt.xlabel(“x轴”) plt.ylabel(“y轴”) plt.xlim(x.min()*1.5,x.max()*1.5) plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r’
?
π
-\pi
?π’,r’
?
π
/
2
-\pi/2
?π/2’,r’
0
0
0’,r’
π
/
2
\pi/2
π/2’,r’
π
\pi
π’]) lines=plt.plot(x,y1,x,y2) plt.legend(lines,[‘正弦’,‘余弦’],shadow=True,fancybox=True) plt.axvline(x=0,linestyle=’–’) plt.axhline(y=0,linestyle=’–’) plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3) plt.axhspan(ymin=0.5,ymax=2.0,alpha=0.3) plt.annotate(“最小值”, xy=(-np.pi/2,-1.0),xytext=(-(np.pi/2),-0.5),arrowprops=dict(arrowstyle=“fancy”)) plt.text(3.10,0.10,“y=sin(x)”,bbox=dict(alpha=0.5)) plt.text(3.10,-1.0,“y=con(x)”,bbox=dict(alpha=0.5)) plt.table(cellText=[[6,6,6],[8,8,8]],colWidths=[0.1]*3, rowLabels=[‘第一行’,‘第二行’], colLabels=[‘第一列’,‘第二列’,‘第三列’], loc=‘center’) plt.title(‘2020080603051’) plt.show() 案例1:支付宝月账单报告(添加标题、图例) import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False kinds=[‘购物’,‘人情往来’,‘餐饮美食’,‘通信物流’,‘生活日用’,‘交通出行’,‘休闲娱乐’,‘其他’] money_scale=[800/3000,100/3000,1000/3000,300/3000, 200/3000,200/3000,200/3000,200/3000] dev_position=[0.1,0.2,0.3,0.1,0.1,0.1,0.2,0.1] plt.pie(money_scale,labels=kinds,autopct=’%3.lf%%’, shadow=True,explode=dev_position,startangle=90)#逆时针开始绘制90度 plt.title(‘2020080603051’) plt.legend(kinds,loc=‘upper right’,bbox_to_anchor=[1.6,1.1]) plt.show() 案例2、汽车速度与制动距离关系 import numpy as np import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False x_speed=np.arange(10,210,10) y_distance=np.array([0.5,2.0,4.4,7.9,12.3,17.7, 24.3,31.5,39.8,49.9,59.3,70.8, 83.1,96.7,110.7,126.0,142.9, 159.9,177.6,196.5]) plt.scatter(x_speed,y_distance,s=50,alpha=0.8,linewidths=0.6) #s:表示面积大小 alpha:表示透明度 plt.xlabel(‘速度(km/h)’) plt.ylabel(‘制动距离(m)’) plt.xticks(x_speed) plt.grid(b=True,linewidth=0.3) plt.title(‘2020080603051’) plt.show() 案例3、全校大数据各班男女生英语成绩评估 import numpy as np import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False men_means=(90.5,89.6,90.9,88.6,86.5,84.6) women_means=(92.8,87.0,93.5,85.4,89.6,90.2) ind=np.arange(len(men_means))#每组柱形的x位置 width=0.2 #各柱形的宽度 fig=plt.figure() ax=fig.add_subplot(111) ax.bar(ind-width/2,men_means,width,label=‘男生平均成绩’) ax.bar(ind+0.2,women_means,width,label=‘女生平均成绩’) ax.set_title(‘高职各班男生、女生英语平均成绩’) ax.set_ylabel(‘分数’) ax.set_xticks(ind) ax.set_xticklabels([‘大数据1班’,‘大数据2班’,‘大数据3班’,‘大数据4班’,‘大数据5班’,‘大数据6班’]) ax.axhline(88.5,ls=’–’,linewidth=1.0,label=‘全体平均成绩’)#设置参考线 ax.legend(loc=“lower right”) plt.title(‘2020080603051’) plt.show() 案例4、阿里巴巴淘宝和天猫平台的GMV import matplotlib.pyplot as plt import numpy as np x=np.arange(1,8) y=np.array([16000,20290,25900,30980,40980,45789,49000]) bar_rects=plt.bar(x,y,tick_label=[“FY2015”,“FY2016”,“FY2017”,“FY2018”,“FY2019”,“FY2020”,“FY2021”]) #添加无指向型注释文本 def autolabel(rects): #在每一个矩形条的上方附加一个文本标签,以显示其高度 for rect in rects: height=rect.get_height()#获取每个矩形条的高度 plt.text(rect.get_x()+rect.get_width()/2,height+300, #主线条中心点位置 s=’{}’.format(height), ha=‘center’,va=‘bottom’) autolabel(bar_rects) plt.ylabel(‘GMV(亿元)’) plt.title(“2020080603051”) plt.show() 案例5、中国电影票房排行榜 import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’]=[‘SimHei’] plt.rcParams[‘axes.unicode_minus’]=False labels=[“哪吒之魔童降世”,“流浪地球”, “复仇者联盟4:终局之战”,“疯狂外星人”, “飞驰人生”,“烈火英雄”,“蜘蛛侠:英雄远征”, “速度与激情:特别行动”,“扫毒2:天地对决”,“大黄蜂”, “惊奇队长”,“比悲伤更悲伤的故事”,“哥斯拉2:怪兽之王”, “阿丽塔:战斗天使”,“银河补习班”] bar_width=[48.57,46.18,42.05,21.83,16.70,14.01,13.81, 12.98,11.89,10.25,9.46,9.27,8.88,8.64,8.20] y_data=range(len(labels)) fig=plt.figure() ax=fig.add_subplot(111) ax.barh(y_data,bar_width,height=0.2,color=‘purple’) #设置x轴和y轴的标签 ax.set_xlabel(“总票房(亿元)”) ax.set_ylabel(“电影名称”) #设置y轴的刻度线位置,刻度标签 ax.set_yticks(y_data) ax.set_yticklabels(labels) plt.title(‘2020080603051’) plt.show()
|