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()