一、认识图表常用的辅助元素
常用的辅助元素包括坐标轴、标题、图例、网格、参考线、参考区域、注释文和表格
二、设置坐标轴的标签、刻度范围和刻度标签
1、设置x轴的标签matplotlib中可以直接使用pyplot模块的xlabel()函数设置x轴的标签,xlabel()函数的语法格式如下:
xlabel(xlabel,fontdict=None, labelpad=None,**kwargs)
- xlabel:表示x轴标签的文本
- fontdict:表示控制标签文本样式的字典
- labelpad:表示标签与坐标轴边框
1.2、设置y轴的标签
ylabel(ylabel,fontdict=None, labelpad=None,**kwargs)
该图标中设置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.title('2020080603039')
plt.show()
效果如下: 2、设置刻度范围 2.1、设置刻度范围 为模块的xlim()和ylim()函数分别设置或获取y轴和x轴的刻度范围
xlim(left=None, right=None, emit=True, auto=False, *
,xmin=None,xmax=None)
该函数常用的参数含义如下:
- left:表示x轴刻度取值区间的左位数
- right:表示x轴刻度取值区间的右位数
- emit:表示是否通知限制变化的观察者,默认为True
- auto:表示是否允许自动缩放x轴,默认为True
- xmin:表示x轴刻度的最小值
- xmax:表示x轴刻度的最大值
Axes对象可以使用set_xlim()和set_ylim()方法分别设置x轴和y轴 2.2、设置刻度标签
xticks(ticks=None, labels=None,**kwargs)
使用的代码如下: 其中完整代码为:
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'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.title('2020080603039')
plt.show()
运行效果为:
三、添加标题和图例
1、添加标题 使用模块title()函数添加图表标签,语法如下:
title(label,fontdict=None, loc='center',pad=None,**kwargs)
参数的含义:
- loc:表示标题的对齐样式,包括‘left’,‘right’,‘center’三种取值,默认取值为‘center’,即居中显示标题
- pad:表示标题与图表顶部的距离,默认为None
添加标题
plt.title("正弦曲线和余弦曲线 ")
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.title("正弦曲线和余弦曲线 39")
plt.show()
运行结果如下: 2、添加图例 使用模块legend()函数添加图例,语法格式如下:
ledgend(handles,labels,loc,bbox_to_anchor,ncol,
title,shadow,fancybox,*args,**kwargs)
调用legend()函数添加图例
lines=plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
运行程序为 图例常见于饼图中,其中代码为:
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.4,0.1,0.3,0.1,0.1,0.1,0.2]
plt.pie(money_scale,labels=kinds,autopct='%3.lf%%',
shadow=True,explode=dev_position,startangle=90)#逆时针开始绘制90度
plt.title('2020080603039')
plt.legend(kinds,loc='upper right',bbox_to_anchor=[1.6,1.1])
plt.show()
其中运用到的loc 可以设置图例的位置,bbox_to_anchor可以设置图例离饼图的距离 运行结果如下: 4、显示网格 使用模块grid()函数显示网格,grid()函数得语法格式如下所示:
grid(b=None, which='major',axis='both',**kwargs)
- b表示是否显示网格。若提供其他关键字参数,则b设为True
- which:表示显示网格的类型,支持major、minor、both这3种类型,默认为major
- axis:表示显示哪个方向的网格,该参数支持both、x和y这3个选择,默认为both
- linewidth:表示网格线的宽度
绘制网格,添加的代码如下:
plt.grid(b=True,axis='y',linewidth=0.4)
完整代码如下:
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.grid(b=True,axis='y',linewidth=0.6)
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'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
plt.title('2020080603039')
plt.show()
ps:因为之前在写其他的代码的时候已经导过包,所以这里没有在进行导包的编写
运行结果如下: 4.2、实例显示网格,用散点图表示,并调整坐标轴的刻度 代码如下:
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=60,alpha=1,linewidths=0.3)
plt.xlabel('速度(km/h)')
plt.ylabel('制动距离(m)')
plt.xticks(x_speed)
plt.grid(b=True,linewidth=0.4)
plt.title('2020080603039')
plt.show()
运行结果如下: 5、添加参考线 5.1.1、使用axhine()绘制水平参考线 语法格式如下:
axhline(y=0, xmin=0,xmax=1,linestule='-')
- y:表示纵坐标
- xmin:表示水平参考线的起始位置,默认wei0
- xmax:表示水平参考线的终止位置,默认为1
- linextyle:表示水平位置参考线的类型,默认值为实线
5.1.2、使用axvline()绘制垂直参考线 语法格式如下:
axvline(x=0, ymin=0,xmax=1,linestule='-')
绘制的正弦和余弦曲线图中添加参考线,添加的代码如下:
plt.axvline(x=0,linestyle='--')
plt.axhline(y=0,linestyle='--')
完整代码如下:
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.grid(b=True,axis='y',linewidth=0.6)
plt.axvline(x=0,linestyle='--')
plt.axhline(y=0,linestyle='--')
plt.title('2020080603039')
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'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
plt.show()
运行结果如下: 5.2、添加区域 5.2.1、使用axhspan()绘制水平参考区域 语法格式如下:
axhspan(ymin, ymin,xmin=0,xmax=1,**kwargs)
- ymin:表示水平跨度的下限,以数据为单位
- ymax:表示水平跨度的上限,以数据为单位
5.2.2、使用axvspan()绘制垂直参考区域 语法格式如下:
axvspan(xmin, xmin,ymin=0,ymax=1,**kwargs)
增加的代码如下:
plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3)
plt.axhspan(ymin=0.5,ymax=1.0,alpha=0.3)
完整代码:
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.axvline(x=0,linestyle='--')
plt.axhline(y=0,linestyle='--')
plt.grid(b=True,axis='y',linewidth=0.6)
plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3)
plt.axhspan(ymin=0.5,ymax=1.0,alpha=0.3)
plt.title('2020080603039')
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'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
plt.show()
运行效果如下: 运用实例,更加直观
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,88.7,88.6,86.5,84.6)
women_means=(92.8,87.0,90.5,85.4,89.6,90.2)
ind=np.arange(len(men_means))
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=2.0,label='全体平均成绩')
ax.legend(loc="lower right")
plt.title('2020080603039')
plt.show()
运行结果: 6、添加注释文本 6.1、添加指向型注释文本 使用annotate()函数,语法如下:
annotate(s, xy ,*args,**kwargs)
- s:表示注释文本的内容
- xy:表示被注释文本所在的坐标位置,接收元组(x,y)
- xytext:表示注释文本所在的坐标位置,接收元组(x,y)
- xycorrds:表示xy的坐标系统,默认值为‘data’,代表与折线图使用相同的坐标系统
- arrowprops:表示指示箭头的属性字典
- bbox:表示注释文本的边框属性字典
添加的代码如下:
plt.annotate("最小值",xy=(-np.pi /2,-1.0),
xytext=(-(np.pi / 2),-0.5),
arrowprops=dict(arrowstyle="->"))
完整代码如下:
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.axvline(x=0,linestyle='--')
plt.axhline(y=0,linestyle='--')
plt.grid(b=True,axis='y',linewidth=0.6)
plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3)
plt.axhspan(ymin=0.5,ymax=1.0,alpha=0.3)
plt.title('2020080603039')
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'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
plt.annotate("最小值",xy=(-np.pi /2,-1.0),
xytext=(-(np.pi / 2),-0.5),
arrowprops=dict(arrowstyle="->"))
plt.show()
运行效果如下: 6.2、添加无指向型注释文本 提供了text()函数为图添加无指向型注释文本,该函数的语法格式为:
text(x,y,s,fontdict=None,widthdash=<deprecated parameter>,**kwargs )
添加的代码如下:
plt.text(3.10,0.10,"y=sin(x)",bbox=dict(alpha=0.2))
完整的代码如下:
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.axvline(x=0,linestyle='--')
plt.axhline(y=0,linestyle='--')
plt.grid(b=True,axis='y',linewidth=0.6)
plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3)
plt.axhspan(ymin=0.5,ymax=1.0,alpha=0.3)
plt.title('2020080603039')
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'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
plt.annotate("最小值",xy=(-np.pi /2,-1.0),
xytext=(-(np.pi / 2),-0.5),
arrowprops=dict(arrowstyle="->"))
plt.text(3.10,0.10,"y=sin(x)",bbox=dict(alpha=0.2))
plt.show()
运行结果为: 实例:添加无指向型注释文本,代码如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=np.arange(1,8)
y=np.array([10070,16780,24440,25640,37607,48520,53410])
bar_rects=plt.bar(x,y,tick_label=["FY2013","FY2014","FY2015","FY2016","FY2017","FY2018","FY2019"],width=0.6)
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.xlabel('年份')
plt.title("2020080603039")
plt.show()
运行结果为: 7、添加自定义样式表格 使用table()函数 添加的代码如下:
plt.table(cellText=[[6,6,6],[8,8,8,]],
colWidths=[0.1]*3,
colLabels=['第1列','第2列','第3列'],loc='lower right')
运行结果为:
|