目录
(2)对于Axes对象的刻度设置 (实例1:2019年中国电影票房排行榜)
(1)_2 没有handles参数(实例2:支付宝月长的那报告(添加标签、图例))
3.1 图表常用的辅助元素
3.2 设置坐标轴的标签、刻度范围和刻度标签
3.2.1 设置坐标轴标签
xlabel(xlabel,fontdict=None,labelpad=None,**kwargs)
xlabel:表示x轴标签的文本
fontdict:表示控制标签文本样式的字典
labelpad:表示标签与坐标轴边框(包括刻度与刻度标签)的距离
设置y同理
(1)对于普通对象
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.show()
(2)对于Axes对象
参加3.2.2 的(2),使用ax.set_xlabel
3.2.2 设置刻度范围和刻度标签
1、设置刻度范围
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轴刻度的最大值
同理也可以换位ylim()
2、设置刻度标签
xticks(ticks=None,labels=None,**kwargs)
ticks:表示刻度显示的位置列表
labels:表示指定位置刻度的标签列表
(1)对于普通对象的刻度设置
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) #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.show()
(2)对于Axes对象的刻度设置 (实例1:2019年中国电影票房排行榜)
要点: Axes对象的刻度设置!!
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='pink')
ax.set_xlabel("总票房(亿元)")
ax.set_ylabel("电影名称") #Axes对象!!用set_ylabel!!!!!!!
ax.set_yticks(y_data)
ax.set_yticklabels(labels)
plt.title('2020080603042')
plt.show()
3.3 添加标题和图例
3.3.1 添加标题
title(label, fontdict=None, loc='center', pad=None, **kwargs)
该函数常用参数的含义如下:
label:表示标题的文本
fontdict:表示控制标题文本样式的字典
loc:表示标题的对齐样式,包括’left’,‘right’和’center’三种取值,默认取值为’center’,即居中显示标题
pad:表示标题与图表顶部的距离,默认为None
Axes用set_title()函数添加标题
plt.title("正弦余弦曲线") #当出现中文时,一定要有那两个
3.3.2 添加图例
legend(handles,labels,loc,bbox_to_anchor,nncol,title,shadow,fancbox,*arg,**kwarges)
handles:表示由图形标识构成的列表,可以不写(如(1)_2)
labels:表示由图例项构成的列表
loc:用于控制图例在图表中的位置.
bbox_to_anchor:用于控制图例的布局,该参数接受一个包含两个数值的元组,其中第一个数值用于控制图例显示的水平位置,值越大则说明图例显示的位置越偏右;第二个数值用于控制图例的垂直位置,值越大则说明图例显示的位置越偏上
ncol:表示图例的列数,默认值为1
title:表示图例的标题,默认为None
shadow:控制图例后面显示阴影,默认值为None
fancybox:控制是否为图例设置圆角边框,默认值为None
注意:如果在绘制图像的函数中已经带有参数lable时,就不需要在legend中设置!!参见3.5.2_(3)_2
(1)实例:一般和ax相同
(1)_1 有handles参数
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)
lines = plt.plot(x,y1,x,y2) ###变化在这里
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min()*1.5,x.max()*1.5) #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox =True) ###变化在这里!!
plt.show()
(1)_2 没有handles参数(实例2:支付宝月长的那报告(添加标签、图例))
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.1,0.3,0.1,0.1,0.1,0.1,0.1]
lines = plt.pie(money_scale,labels=kinds,autopct='%3.lf%%',
shadow=True,explode=dev_position,startangle=90)#逆时针开始绘制90度
plt.title('2020080603042')
plt.legend(kinds,loc='upper right',bbox_to_anchor=[1.5,1.1])
plt.show()
3.4 显示网格
3.4.1 显示指定样式的网格
grid(b=None,which='major',axis='both',**kwargs)
该函数参数如下:
b:表示是否显示网格,若提供其它关键字参数,则b参数设为True
which:表示显示网格的类型,支持major,minor,both这三种类型,默认为major
axis:表示显示哪个方向的网格,该参数支持both、x和y这三个选项,默认为both
linewidth或lw:表示网格线的宽度
如果坐标轴没有刻度,就无法显示网格.
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)
lines = plt.plot(x,y1,x,y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min()*1.5,x.max()*1.5) #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.legend(['正弦','余弦'],shadow=True,fancybox =True)
plt.grid(axis = 'y',linewidth=0.3) #变化在这里!!!
plt.show()
沿着y轴的刻度延申的网格
3.5 添加参考线和参考区域
3.5.1 参考线
(1)水平参考线
axhline(y=0,xmin=0,xmax=1,linestyle='-',**kwargs)
y:表示水平参考线的纵坐标
xmin:表示水平参考线的起始位置,默认为0
xmax:表示水平参考线的终止位置,默认为1
linestyle:表示水平参考线的的类型,默认为实线
(2)垂直参考线
和上方一样
(3)实例:一般和ax的参考线设置方式相同
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)
lines = plt.plot(x,y1,x,y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min()*1.5,x.max()*1.5) #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.legend(['正弦','余弦'],shadow=True,fancybox =True)
plt.grid(axis = 'y',linewidth=0.3)
plt.axvline(x=0,ls = "--")
plt.axhline(y=0,ls = "--")
plt.show()
3.5.2 参考区域
(1)水平参考区域
axhspan(ymin,ymax,xmin=0,xmax=1,**kwargs)
ymin:表示水平跨度的下限,以数据为单位
ymax:表示水平跨度的上限,以数据为单位
xmin:表示垂直跨度的下限,以轴为单位,默认为0
xmax:表示垂直跨度的上限,以轴为单位,默认为1
(2)垂直参考区域
axvspan(xmin,xmax,ymin=0,ymax=1,**kwargs)
参数含义同上
(3) 实例:一般和ax设置方式相同
3_1
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)
lines = plt.plot(x,y1,x,y2)
plt.axvline(x=0,linestyle='--')
plt.axhline(y=0,linestyle='--')
plt.legend(lines, ['正弦','余弦'],shadow=True,fancybox=True)
plt.plot(x,y1,x,y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.grid(axis='y',linewidth=1.3)
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.axvspan(xmin=0.5,xmax=2.0,alpha=0.3)
plt.axhspan(ymin=0.5,ymax=1.0,alpha=0.3)
plt.title('2020080603042')
plt.show()
3_2
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=1.0,label='全体平均成绩')
ax.legend(loc="lower right") #label已经设置的情况下,只需要调整位置即可
plt.title('2020080603042')
plt.show()
3.6 添加注释文本
3.6.1 添加指向型注释文本
annotate(x,xy,*args,**kwargs)
s:表示注释文本的内容
xy:表示被注释的点的坐标位置,接收元组(x,y)
xytext:表示注释文本所在的坐标位置,接收元组(x,y)
xycoords:表示xy的坐标系统,默认值为’data’,代表域折线图使用相同的坐标系统
arrowprops:表示指示箭头的属性字典
bbox:表示注释文本的边框属性字典
plt.annotate("最小值",xy=(-np.pi / 2, -1.0),
xytext=(-(np.pi / 2), -0.5),
arrowprops=dict(arrowstyle="->"))
3.6.2 添加无指向型注释文本
text(x,y,s,fontdict=None, withdash =<deprecated parameter>,**kwargs)
该函数常用参数含义如下:
x,y:表示注释文本的位置
s:表示注释文本的内容
fontdict:表示控制字体的字典
bbox:表示注释文本的边框属性字典
horizontalalignment或ha:表示水平对齐方式,可以取值为center、right或left.
vertcalalignment或va:表示垂直对齐的方式,可以取值为center、top、bottom、baseline或center_baseline.
3.6.3 实例5:2013-2019年某电商平台的GMV
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=np.arange(1,8)
y=np.array([10770,16780,24440,30920,37670,48200,57270])
bar_rects=plt.bar(x,y,tick_label=["FY2013","FY2014","FY2015","FY2016","FY2017","FY2018","FY2019"],width=0.5)
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('2020080603042')
plt.show()
3.7 添加表格
3.7.1 table()函数
table()
cellText:表示表格单元格中的数据,是一个二维列表
cellColours:表示单元格的背景颜色
cellLoc:表示单元格文本的对齐方式,支持’left’,‘right’,‘center’三种取值,默认为’right’.
colWidths:表示每列的宽度
rowLabels:表示行标题的文本
rowColours:表示行标题所在单元格的背景颜色
rowLoc:表示行标题的对齐方式
colLabels:表示列标题的文本
colColours:表示列标题所在单元格的背景颜色
colLoc:表示列标题的对齐方式
loc:表示表格与绘图区域的对齐方式
plt.table(cellText=[[6,6,6,],[8,8,8]],
colWidths=[0.1]*3,
rowLabels=['第一行','第二行'],
colLabels=['第一行','第二行','第三行'],loc='lower right')