Matplotlib:一个Python优秀的数据可视化第三方库,Python 2D-绘图领域使用最广泛的套件。
Gallery - Matplotlib 3.3.0 documentationmatplotlib.orgMatplotlib库的使用
Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发
matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式
import matplotlib.pyplot as plt(建议使用plt作为别名)
pyplot的plot()函数
plt.plot(x,y,format_string,**kwargs)
- x:x轴数据,列表或数组,可选(当绘制多条曲线时,各条曲线的x不能省略)
- y:y轴数据,列表或数组
- format_string:控制曲线的格式字符串,可选
- **kwargs:第二组或更多(x,y,format_string)
plt.plot()只有一个输入列表或数组时,参数被当作y轴,x轴以索引自动生成
import
format_string:控制曲线的格式字符串,由颜色字符、风格字符和标记字符组成
如果不指定颜色,系统会自动的选择一条与其他颜色不同的颜色赋给曲线
标记字符:在曲线中的每一个数据点采取什么样的方式标记
进行风格自定义后
import
其他控制参数命令
- color:控制颜色,color='green'
- linestyle:线条风格,linestyle='dashed'
- marker:标记风格,marker='o'
- marekerfacecolor:标记颜色,markerfacecolor='blue'
- markersize:标记尺寸,markersize=20
pyplot的中文显示
- pyplot并不默认支持中文显示,需要rcParams修改字体实现
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei' #'SimHei'是黑体
plt.plot([3,1,4,5,2])
plt.ylabel("纵轴(值)")
plt.savefig('test',dpi=600)
#plt.savefig()将输出图形存储为文件,默认PNG格式,可以通过dpi修改输出质量
#DPI:图像每英寸长度内的像素点数
plt.show()
rcParams的属性
import
- 在特定需要中文输出的地方,增加一个属性:fontproperties,局部字体作用,推荐使用
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(0.0,5.0,0.1)
plt.xlabel("横轴:时间",fontproperties='SimHei',fontsize=20)
plt.ylabel("纵轴:振幅",fontproperties='SimHei',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'g:v')
plt.show()
pyplot的文本显示方法
- plt.xlabel() 对x轴增加文本标签
- plt.ylabel() 对y轴增加文本标签
- plt.title() 对图形整体增加文本标签
- plt.text() 在任意位置增加文本
- plt.annotate() 在图形中增加带箭头的注解
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(0.0,5.0,0.1)
plt.plot(a,np.cos(2*np.pi*a),'g:*')
plt.xlabel("横轴:时间",fontproperties='SimHei',fontsize=20,color='green')
plt.ylabel("纵轴:振幅",fontproperties='SimHei',fontsize=20,color='blue')
plt.title(r'正弦波实例 $y=cos(2pi x)$',fontproperties='SimHei',fontsize=25)
plt.annotate(r'$mu=100$',xy=(2,1),xytext=(3,1.5),arrowprops=(dict(facecolor='black',shrink=0.1,width=2)))
#文本显示在(2,1)位置上
#LaTeX格式的数学公式排版命令 $ 数学公式 $
#shrink表示从箭头的起始到结束按照0.1的比例,箭头的两侧会缩进
plt.axis([-1,6,-2,2]) #横轴坐标(-1,6) 纵轴坐标(-2,2)
plt.grid(True) #加入网格曲线
plt.show()
plt.annotate(s,xy=arrow_crd,xytext=text_crd,arrowprops=dict)
- s:要注解的字符串
- xy:箭头所在的位置
- xytext:文本显示的位置
- arrowprops:一个字典类型,定义了整个箭头显示的属性
pyplot的子绘图区域
plt.subplot(nrows,ncols,plot_number)
在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域
- nrows 横轴数量
- ncols 纵轴数量
- plot_number 当前绘图区域
import matplotlib.pyplot as plt
import numpy as np
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)
a=np.arange(0.5,5.0,0.1)
plt.subplot(3,2,1)
plt.plot(a,f(a))
plt.subplot(3,2,2)
plt.plot(a,np.cos(2*np.pi*a))
plt.subplot(3,2,5)
plt.plot(a,np.exp(a))
plt.subplot(3,2,6)
plt.plot(a,np.log10(a))
plt.show()
plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)
设定网格,选中网格,确定选中行列区域数量,编号从0开始
- GridSpec:一个元组(m,n),将一个区域分割成m行n列的网格形状
- CurSpec:一个元组(m,n),当前选定的位置为第m行第n列(编号从0开始)
- colspan:列的延伸,从选定位置在列的方向上延伸n个长度
- rowspan:行的延伸,从选定位置在行的方向上延伸n个长度
GridSpec类
import matplotlib.gridspec as gridspec
gs=gridspec.GridSpec(3,3) #3行3列,9块区域
ax1=plt.subplot(gs[0,:]) #横向第0行,纵向全部
ax2=plt.subplot(gs[1,:-1]) #横向第1行,纵向除最后一个取全部
ax3=plt.subplot(gs[1:,-1]) #横向从第1行去到结束,纵向最后一列
ax4=plt.subplot(gs[2,0]) #第2行0列
ax5=plt.subplot(gs[2,1]) #第2行1列