最后一次更新日期: 2019/4/20
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。
按需导入以下模块:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
1. 图像figure
In [71]: fig=plt.figure(1)
<Figure size 432x288 with 0 Axes>
In [72]: fig=plt.figure(2,figsize=(5,3))
<Figure size 360x216 with 0 Axes>
In [73]: fig.suptitle('title')
Out[73]: Text(0.5,0.98,'title')
Figure
是所有绘图元素的顶级容器,可以认为是一张画布,第一个参数num
设置图像的编号,第二个figsize
参数设置图像大小。
Figure.suptitle
方法用于设置图像的总标题(也可通过plt.suptitle
设置),fontsize
参数可以设置字体大小,x
和y
参数设置位置坐标,取值为0.~1.的相对于Figure
的宽和高的比例。
Figure
上无法直接绘图,需要至少添加一个Axes
,在调用plt
的静态方法绘图时,会绘制在最近声明的一个Figure
上,不显示声明则会自动按默认配置创建Figure
和Axes
,plt.gcf()
方法可以获取当前正在绘制的Figure
。
Figure.axes
可以获取图像下的所有Axes
;
Figure.clf()
方法可以清空图像。
Artist
是matplotlib中所有绘图对象的基类,Figure
也是继承自该类,可在官方文档查看到完整的继承关系。
2. 坐标轴axes
x=np.arange(0,720,1)
y1=np.sin(x*np.pi/180)
y2=np.cos(x*np.pi/180)
#方法1
fig=plt.figure(figsize=(7.5,3))
fig.suptitle('sin/cos',fontsize=16)
ax=fig.add_axes((0,0,0.5,0.8),title='ax1')
ax.plot(x,y1)
ax=fig.add_axes((0.6,0,0.5,0.8),title='ax2')
ax.plot(x,y2)
plt.show(fig)
#方法2
fig=plt.figure(figsize=(10.5,3))
fig.suptitle('sin/cos',fontsize=16)
ax=fig.add_subplot(121,title='ax1', projection='3d')
ax.plot(x,y1)
ax=fig.add_subplot(122,title='ax2', projection='3d')
ax.plot(x,y2)
plt.show(fig)
Axes
的意思是用于绘图的坐标轴,AxesSubplot
是封装了Axes
的子图,通过不同的方法创建,子图在布局上更方便,绘图时则没有明显的区别,下面会将Axes
也称作子图。
绘制不同图像会使用不同轴类型,最常用的xy坐标轴和xyz坐标轴分别为Axes
和Axes3D
。如果只需要一个Axes
,可以不显示声明,直接调用plt
的静态方法绘制,Axes
会被自动创建(通过add_subplot(111)
)。当存在多个Axes
时,可以调用Axes
的方法绘图以保证图像被绘制在正确的子图上,调用静态方法绘制时实际上是通过plt.gca()
获取了最后声明的Axes
。
Axes.plot
是绘图方法,用于绘制曲线图。
Axes
在绘图时需要提供x,y两个轴的坐标,而Axes3D
需要提供x,y,z三个轴的坐标,上方的例子中没有提供z轴坐标所以图像被绘制在高度为0的一个平面上。
Axes
是绑定在Figure
上的,可通过调用Figure
的add_axes
或add_subplot
方法创建新的Axes
或是将已有Axes
添加到Figure
上。两种方法在子图的大小和位置的设置上有所区别,需要相应的调整参数。
add_axes
方法的第一个参数rect
通过一个浮点数序列设置Axes
的位置和大小,格式为(left,bottom,width,height)
,值均为0.~1.的相对于Figure
的宽和高的比例。
add_subplot
方法的前三个参数分别设置区间划分的行数、列数、以及子图的索引,例如2,3,5
表示将Figure
划分为2行3列,在其中第5个区间上添加子图;前三个参数可以替换为单个3位整数表示同一含义,但每位的值不得超过10,例如2,3,5
对应235
。
title
参数用于设置子图的标题,也可通过Axes.set_title
或plt.title
方法设置;
projection
参数设置投影类型,即坐标轴类型,其中,'rectilinear'
表示直线(xy)坐标轴,也是默认值,'3d'
表示3D(xyz)坐标轴。
除以上两种方法,还可使用fig,ax_list = plt.subplots(figsize=(10.5,3),ncols=2,nrows=1)
快速规划画布,只需要指定画布大小、列划分数量和行划分数量,省去写循环的时间。
get_children
方法能够获取Axes
下的所有绘图元素;
collections
属性能够获取所有绘图元素集合;
如想获取指定类型的元素,可使用get_xlabel
等方法;
cla
方法可以清除当前轴的内容。
3. 显示show
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()
plt.plot(x,y1)
plt.show()
plt.plot(x,y2)
plt.show()
plt.show()
方法用于显示已绘制的图像,一般配合plt
的静态绘图方法使用(即不显示声明Figure
的情况)。在使用静态方法绘图时,如果不调用show
,则代码段的中所有绘图元素将会绘制在自动创建的同一Figure
的同一Axes
上。
在ipython中,直接输入Figure
的变量名也可以将其图像显示出来;在执行一段含绘图语句的代码段后,也会自动显示图像。
4. 保存save
fig.savefig('D:\\test.jpg')
Figure
的savefig
方法可以保存图片至指定路径,也可调用plt
的静态方法保存,但必须和绘图的代码一起执行,且必须在show
方法之前执行。
ipython中直接右键显示出来的图片也有保存的选项。