Matplotlib中图表辅助元素
图表常用的辅助元素
图表的辅助元素是指除了根据数据绘制的图形之外的元素,常用的辅助元素包括坐标轴、标题、图例、网格、参考线、参考区域、注释文本和表格,它们都可以对图形进行补充说明。
坐标轴
坐标轴是由刻度标签、刻度线、轴脊和坐标轴标签组成。
xlabel()函数
语法:
xlabel(xlabel)
参数 | 解释 |
---|---|
xlabel | x轴标签文本 |
案例
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)
y1.y2 = np.sin(x),np.cos(x)
plt.plot(x,y1,x,y2)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.show()
效果展示:
xlim()函数
语法:
xlim(left,right)
参数 | 解释 |
---|---|
left | 坐标轴刻度取值区间的左端点 |
right | 坐标轴刻度取值区间的右端点 |
xticks()函数
语法:
xticks(ticks=None,labels=None)
参数 | 解释 |
---|---|
ticks | 刻度显示的位置列表 |
labels | 位置刻度的标签列表 |
案例
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)
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$','$\pi/2$',r'$\pi$'])
plt.show()
效果展示:
案例-2019年中国电影票房排行榜
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
labels = ['哪吒之魔童降世','流浪地球'.'复仇者联盟4','疯狂的外星人','飞驰人生','烈火英雄']
bar_width = [48.57,46.18,42.05,21.83,17.03,16.70]
y_data = range(len(labels))
plt.barh(y_data,bar_width,height=0.2,color='orange')
plt.xlabel("总票房(亿元)")
plt.ylabel("电影名称")
plt.yticks(y_data,labels)
plt.show()
效果展示:
标题
图表标题
图表标题:图标名称
title()函数
语法:
title(label)
参数 | 解释 |
---|---|
label | 标题的文本 |
案例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
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$','$\pi/2$',r'$\pi$'])
plt.title('正弦和余弦曲线')
plt.show()
效果展示:
图例
图例是一个列举的各组图形数据标识方式的方框图,它由图例标识和图例项两部分组成,其中图例标识是代表各组图形的图案;图例项是与图例标识对应的名称。
legend()函数
语法:
legend(handles,labels,loc,bbox_to_anchor)
参数 | 解释 |
---|---|
handles | 图形标识列表 |
labels | 图例项列表 |
loc | 位置字符串:upper right,lower left, center left |
bbox_to_anchor | 位置元组 |
案例
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)
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$','$\pi/2$',r'$\pi$'])
plt.title('正弦余弦曲线')
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦'.'余弦'])
plt.show()
效果展示:
网格
网格是从刻度线开始延伸,贯穿至整个绘图区域的辅助线条,它能帮助人们轻松地查看图形的数值,网格可以分为垂直网格和水平网格。
grid()函数
语法:
grid(axis = 'both',linewidth)
参数 | 解释 |
---|---|
axis | 网格方向 |
linewidth | 网格线宽度 |
案例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
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$',r'$0$','$\pi/2$',r'$\pi$'])
plt.title('正弦余弦曲线')
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'])
plt.grid(axis='y')
plt.show()
效果展示:
参考线
参考线是一条或多条贯穿绘图区域的线条,用于为绘图区域中图形数据之间的比较提供参考依据,比如目标线、平均线、预算线等。
axhline()函数
语法:
axhline(y=0,xmin=0,xmax=1,linestyle='-')
参数 | 解释 |
---|---|
y | 水平参考线的纵坐标 |
xmin | 水平参考线的起始位置,默认为0 |
xmax | 水平参考线的终止位置,默认为1 |
linestyle | 水平参考线的类型,默认为实线 |
axvline()函数
语法:
axhline(x=0,ymin=0,ymax=1,linestyle='-')
参数 | 解释 |
---|---|
x | 垂直参考线的横坐标 |
ymin | 垂直参考线的起始位置,默认为0 |
ymax | 垂直参考线的终止位置,默认为1 |
linestyle | 垂直参考线的类型,默认为实线 |
案例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
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$',r'$0$','$\pi/2$',r'$\pi$'])
plt.title('正弦余弦曲线')
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'])
plt.grid(axis='y')
plt.axhline(y=0.5,linestyle='--')
plt.axvline(x=0.5,linestyle=':')
plt.show()
效果展示:
参考区域
axhspan()函数
语法:
axhspan(ymin,ymax,xmin=0,xmax=1)
参数 | 解释 |
---|---|
ymin | 水平跨度的下限 |
ymax | 水平跨度的上限 |
xmin | 垂直跨度的下限,是比例数值,默认为0。 |
xmax | 垂直跨度的上限,是比例数值,默认为1。 |
axhspan()函数
语法:
axvspan(xmin,xmax,ymin=0,ymax=1)
参数 | 解释 |
---|---|
xmin | 水平跨度的下限 |
xmax | 水平跨度的上限 |
ymin | 垂直跨度的下限,是比例数值,默认为0。 |
ymax | 垂直跨度的上限,是比例数值,默认为1。 |
案例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
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$',r'$0$','$\pi/2$',r'$\pi$'])
plt.title('正弦余弦曲线')
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'])
plt.grid(axis='y')
plt.axhline(y=0.5,linestyle='--')
plt.axvline(x=0.5,linestyle=':')
plt.axhspan(ymin=0.5,ymax=1,alpha=0.3)
plt.axvspan(xmin=0.5,xmax=2,alpha=0.3)
plt.show()
效果展示:
注释
注释文本能够对图形进行简短描述,有助于用户理解图表。
annotate函数
语法:
annotate(s,xy,xytext,arrowprops)
参数 | 解释 |
---|---|
s | 注释文本内容 |
xy | 被注释的点的坐标位置,接受元组(x,y) |
xytext | 注释文本所在的坐标位置,接受元组(x,y) |
arrowprops | 指示箭头的属性字典 |
键arrowstyle代表箭头类型:
案例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
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$',r'$0$','$\pi/2$',r'$\pi$'])
plt.title('正弦余弦曲线')
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'])
plt.grid(axis='y')
plt.axhline(y=0.5,linestyle='--')
plt.axvline(x=0.5,linestyle=':')
plt.axhspan(ymin=0.5,ymax=1,alpha=0.3)
plt.axvspan(xmin=0.5,xmax=2,alpha=0.3)
plt.annotate('最小值',xy=(-np.pi/2,-1.0),xytext=(-np.pi/2,-0.5),arrowprops=dict(arrowstyle='->'))
plt.show()
效果展示:
text函数
语法:
text(x,y,s,ha,va)
参数 | 解释 |
---|---|
x,y | 注释文本位置 |
s | 注释文本的内容 |
ha | 水平对齐方式:‘center’、‘right’、‘left’ |
va | 垂直对齐方式:‘center’、‘top’、‘bottom’ |
案例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
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$',r'$0$','$\pi/2$',r'$\pi$'])
plt.title('正弦余弦曲线')
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'])
plt.grid(axis='y')
plt.axhline(y=0.5,linestyle='--')
plt.axvline(x=0.5,linestyle=':')
plt.axhspan(ymin=0.5,ymax=1,alpha=0.3)
plt.axvspan(xmin=0.5,xmax=2,alpha=0.3)
plt.annotate('最小值',xy=(-np.pi/2,-1.0),xytext=(-np.pi/2,-0.5),arrowprops=dict(arrowstyle='->'))
plt.text(3.15,0.15,'y=sin(x)',bbox=dict(alpha=0.2))
plt.show()
2013-2019财年阿里巴巴淘宝和天猫平台的GMV
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([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('成交总额(亿元)')
plt.show()
效果展示:
表格
table函数
语法:
table(one,ceIILoc=right,rowLabels=None,coILabels=None)
参数 | 解释 |
---|---|
cellText | 表格单元格中的数据,是一个二维列表 |
ceIILoc | 单元格文本的对齐方式,支持’left’、‘center’、'right’三种 |
rowLabels | 表示行标题的文本 |
coILabels | 表示列标题的文本 |
案例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256)
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$',r'$0$','$\pi/2$',r'$\pi$'])
plt.title('正弦余弦曲线')
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'])
plt.grid(axis='y')
plt.axhline(y=0.5,linestyle='--')
plt.axvline(x=0.5,linestyle=':')
plt.axhspan(ymin=0.5,ymax=1,alpha=0.3)
plt.axvspan(xmin=0.5,xmax=2,alpha=0.3)
plt.annotate('最小值',xy=(-np.pi/2,-1.0),xytext=(-np.pi/2,-0.5),arrowprops=dict(arrowstyle='->'))
plt.text(3.15,0.15,'y=sin(x)',bbox=dict(alpha=0.2))
plt.table(cellText=[[0,-1],[-1,0]],rowLabels=['正弦','余弦'],coilabels=['$-\pi$','$-\pi/2$'],loc='lower right')
plt.show()
效果展示:
总结
Python是非常强大的数据计算工具,其Matplotlib包封装了非常强大的图像编辑功能,下面是各种图形注释的表达式:
辅助元素 | 函数 |
---|---|
x轴标签文本 | xlabel(xlabel) |
x轴坐标刻度 | xlim(left,right) |
x轴坐标元素点显示 | xticks(ticks=None,labels=None) |
图像标题 | title(label) |
图例 | legend(handles,labels,loc,bbox_to_anchor) |
网格 | grid(axis = ‘both’,linewidth) |
水平参考线 | axhline(y=0,xmin=0,xmax=1,linestyle=’-’) |
水平参考区域 | axhspan(ymin,ymax,xmin=0,xmax=1) |
文本注释 | annotate(s,xy,xytext,arrowprops) |
无指向文本注释 | text(x,y,s,ha,va) |
表格 | table(one,ceIILoc=right,rowLabels=None,coILabels=None) |