本博文源于《python数据可视化》(黑马程序员编著)旨在讲解如何使用python对画出的图表定制出坐标轴、标题、图例、网格、参考线、参考区域、注释文本和表格.
1.设置坐标轴标签
1.1 设置x轴的标签
xlabel(xlabel,fontdict=None,labelpad=None,**kwargs)
该函数参数如下:
- xlabel:表示x轴标签的文本
- fontdict:表示控制标签文本样式的字典
- labelpad:表示标签与坐标轴边框(包括刻度与刻度标签)的距离
1.2 设置y轴的标签
只要把代码中x换成y即可。
ylabel(ylabel, fontdict=None, labelpad=None,**kwargs)
1.3 示例:正弦和余弦曲线图
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.show()
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.2 设置刻度标签
xticks(ticks=None,labels=None,**kwargs)
- ticks:表示刻度显示的位置列表
- labels:表示指定位置刻度的标签列表
2.3 示例:设置刻度范围与刻度标签的正弦余弦图
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轴")
# 设置x轴的刻度范围和刻度标签
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.show()
3.添加标题和图例
3.1 添加标题
title(label, fontdict=None, loc='center', pad=None, **kwargs)
该函数常用参数的含义如下:
- label:表示标题的文本
- fontdict:表示控制标题文本样式的字典
- loc:表示标题的对齐样式,包括’left’,‘right’和’center’三种取值,默认取值为’center’,即居中显示标题
- pad:表示标题与图表顶部的距离,默认为None
同样的也可以用set_title()函数添加标题
3.2 添加图例
legend(handles,labels,loc,bbox_to_anchor,ncol,title,shadow,fancybox,*args,**kwargs)
- handles:表示由图形标识构成的列表
- labels:表示由图例项构成的列表
- loc:用于控制图例在图表中的位置.
位置编码 | 位置字符串 | 说明 |
---|---|---|
0 | ‘best’ | 自适应 |
1 | ‘upper right’ | 右上方 |
2 | ‘upper left’ | 左上方 |
3 | ‘lower left’ | 左下方 |
4 | ‘lower right’ | 右下方 |
5 | ‘right’ | 右方 |
6 | ‘center left’ | 中心偏左 |
7 | ‘center right’ | 中心偏右 |
8 | ‘lower center’ | 中心偏下 |
9 | ‘upper center’ | 中心偏上 |
10 | ‘center’ | 居中 |
- bbox_to_anchor:用于控制图例的布局,该参数接受一个包含两个数值的元组,其中第一个数值用于控制图例显示的水平位置,值越大则说明图例显示的位置越偏右;第二个数值用于控制图例的垂直位置,值越大则说明图例显示的位置越偏上
- ncol:表示图例的列数,默认值为1
- title:表示图例的标题,默认为None
- shadow:控制图例后面显示阴影,默认值为None
- fancybox:控制是否为图例设置圆角边框,默认值为None
3.3 示例:设置标题和图例的正弦余弦图
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)
# 添加图例
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
# 设置x轴和y轴的标签
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('正弦曲线和余弦曲线')
plt.show()
4.显示网格
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:表示网格线的宽度
如果坐标轴没有刻度,就无法显示网格.
4.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)
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
# 显示网格
plt.grid(b=True,axis='y',linewidth=0.3)
# 设置x轴和y轴的标签
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('正弦曲线和余弦曲线')
plt.show()
5. 添加参考线和参考区域
5.1 添加水平参考线
axhline(y=0,xmin=0,xmax=1,linestyle='-',**kwargs)
- y:表示水平参考线的纵坐标
- xmin:表示水平参考线的起始位置,默认为0
- xmax:表示水平参考线的终止位置,默认为1
- linestyle:表示水平参考线的的类型,默认为实线
5.2 添加垂直参考线
将上面的axhiline改成axline,x轴换成y轴即可.
5.3 添加水平参考区域
axhspan(ymin,ymax,xmin=0,xmax=1,**kwargs)
- ymin:表示水平跨度的下限,以数据为单位
- ymax:表示水平跨度的上限,以数据为单位
- xmin:表示垂直跨度的下限,以轴为单位,默认为0
- xmax:表示垂直跨度的上限,以轴为单位,默认为1
5.4 添加垂直参考区域
axvspan(xmin,xmax,ymin=0,ymax=1,**kwargs)
- xmin:表示垂直跨度的下限
- xmax:表示垂直跨度的上限
5.5 示例:添加参考线和参考区域的正余弦图
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)
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
# 添加网格线
plt.grid(b=True,axis='y',linewidth=0.3)
# 添加参考线
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=1.0,alpha=0.3)
# 设置x轴和y轴的标签
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('正弦曲线和余弦曲线')
plt.show()
6. 添加注释文本
指向型注释文本一般是指真丢图表某一部分的特定说明,无指向型注释文本一般是针对图表整体的特定说明
6.1 添加指向型注释文本
annotate(x,xy,*args,**kwargs)
- s:表示注释文本的内容
- xy:表示被注释的点的坐标位置,接收元组(x,y)
- xytext:表示注释文本所在的坐标位置,接收元组(x,y)
- xycoords:表示xy的坐标系统,默认值为’data’,代表域折线图使用相同的坐标系统
- arrowprops:表示指示箭头的属性字典
- bbox:表示注释文本的边框属性字典
arrowprops参数接收一个包含若干键的字典,通过向字典中添加键值对来控制箭头的显示。常见的控制箭头包括width,headwidth,headlength,shrink,arrowstyle等,其中arrowstyle代表箭头的类型,分别有:
取值 |
---|
- |
-> |
-[ |
|-| |
-|> |
<- |
<-> |
<|- |
<|-|> |
fancy |
simple |
wedge |
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.
6.3 示例:添加注释文本的正余弦图
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)
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
plt.grid(b=True,axis='y',linewidth=0.3)
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=1.0,alpha=0.3)
# 设置x轴和y轴的标签
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.annotate("最小值",xy=(-np.pi/2,-1.0),xytext=(-(np.pi/2),-0.5),arrowprops=dict(arrowstyle='->'))
# 添加标题
plt.title('正弦曲线和余弦曲线')
# 添加无指向型注释文本
plt.text(3.10, 0.10, "y=sin(x)", bbox=dict(alpha=0.2))
plt.show()
7.添加表格
7.1 添加自定义样式表格
table(celText=None, cellColours=None, cellLoc='right', colWidths=None,
rowLabels=None, rowColours=None, rowLoc='left', colLabels=None,
colColours=None, colLoc='center',loc='bottom',bbox=None,
edge='closed',**kwargs)
- cellText:表示表格单元格中的数据,是一个二维列表
- cellColours:表示单元格的背景颜色
- cellLoc:表示单元格文本的对齐方式,支持’left’,‘right’,‘center’三种取值,默认为’right’.
- colWidths:表示每列的宽度
- rowLabels:表示行标题的文本
- rowColours:表示行标题所在单元格的背景颜色
- rowLoc:表示行标题的对齐方式
- colLabels:表示列标题的文本
- colColours:表示列标题所在单元格的背景颜色
- colLoc:表示列标题的对齐方式
- loc:表示表格与绘图区域的对齐方式
7.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)
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox=True)
plt.grid(b=True,axis='y',linewidth=0.3)
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=1.0,alpha=0.3)
# 设置x轴和y轴的标签
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.annotate("最小值",xy=(-np.pi/2,-1.0),xytext=(-(np.pi/2),-0.5),arrowprops=dict(arrowstyle='->'))
plt.title('正弦曲线和余弦曲线')
# 添加无指向型注释文本
plt.text(3.10, 0.10, "y=sin(x)", bbox=dict(alpha=0.2))
# 添加表格
plt.table(cellText=[[r'$\pi/6$',r'$\pi/4$',r'$\pi/3$'],[r'$\frac{1}{2}$',r'$\frac{\sqrt{2}}{2}$',r'$\frac{\sqrt{3}}{2}$']],
colWidths=[0.1]*3,
rowLabels=['第1行','第2行'],
colLabels=['第1列','第2列','第3列'],loc='lower right')
plt.show()