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中直接右键显示出来的图片也有保存的选项。
二. 绘图设置
1. 投影projection
projection
参数用于设置生成的 Axes
类型,在 add_axes
、 add_subplot
等方法中可使用。
常用的几个类型: 'rectilinear'
:直线坐标轴,即2d的xy坐标轴,默认值; '3d'
:3D的xyz坐标轴,绘制3d图像会使用这个,注意,使用该类型前必须先导入 Axes3D
; 'polar'
:极坐标轴。
2. 字体font
plt.rcParams['font.sans-serif']
属性用于设置默认字体,当图像中中文显示存在问题时,可通过该项将字体设置为支持中文的字体,例如 ['SimHei']
黑体; plt.rcParams['font.size']
属性用于设置默认字体大小。
也可以仅在特定文本上应用字体, fontsize
参数设置字体大小, fontproperties
参数设置字体,在 suptitle
、 set_title
、 text
等用于定义文字显示的方法中可使用。
当负号无法正常显示时,设置 plt.rcParams['axes.unicode_minus']=False
。
3. 颜色color
多以 color
或 colors
参数设置主体颜色或颜色序列,简写形式 c
,也有单独设置某个部分颜色的参数: facecolor
设置填充颜色,简写形式 fc
; edgecolor
设置边缘颜色,简写形式 ec
。
支持多种标识颜色的方式: (1). 以 tuple
表示的RGB或RGBA值,取值范围在0.~1.,例如 (0.1,0.2,0.5)
; (2). 以 str
表示的16进制的RGB或RGBA值,取值范围00~FF,例如 '#0F0F0F'
; (3). 以 str
表示的颜色标签,可参考下图(官方示例)。
除了单个颜色外,matplotlib还提供了colormap,是特定主题的颜色集合,一般通过 cmap
参数设置,而预定义的colormap在 plt.cm
下,可用种类详见官方文档。
4. 标题title
Figure.suptitle
或 plt.suptitle
方法用于设置总标题; Axes.set_title
或 plt.title
方法以及创建 Axes
时的 title
参数用于设置子标题。
5. 坐标轴axis
xlabel
、 ylabel
、 zlabel
等方法用于设置坐标轴的标签; xticks
、 yticks
、 zticks
等方法用于设置坐标轴的刻度,传入参数为刻度值列表和刻度标签列表,第二个参数可以省略,会以刻度值作为标签文字; xlim
、 ylim
、 zlim
等方法用于设置坐标轴的范围,传入参数为开始值和结束值;
axis('off')
可以关闭坐标轴显示; 以上方法均可通过 Axes
或 plt
调用。
6. 图例legend
plt.plot(x,y1,label='sin') plt.plot(x,y2,label='cos') plt.legend() plt.show() 复制代码
legend
方法用于显示图例,绘图元素必须有标签才能正常生成图例,可在绘制图像时通过 label
参数设置标签,或是调用 legend
方法时传入标签列表。 loc
参数设置图例的位置,默认 'best'
自动选择。
7. 标记样式marker
参数 marker
设置标记样式,可选的样式参考官方文档-markers; 参数 s
或 markersize
设置标记大小。
标记样式可在散点图、曲线图等中设置。
8. 线条样式linestyle
参数 linestyle
设置线条样式,一般默认 '-'
实线,可选的样式见下方表格; 参数 linewidth
设置线的宽度,简写形式 lw
。
linestyle | 说明 |
---|---|
'-' or 'solid' | 实线 |
'--' or 'dashed' | 虚线 |
'-.' or 'dashdot' | 点划线 |
':' or 'dotted' | 点虚线 |
'None' or '' | 不绘制 |
线条样式在所有含线条的绘图对象中几乎都可以设置。
9. 透明度alpha
参数 alpha
设置点的透明度,一般默认 1.
,值越小透明度越高。
透明度在所有含平面的绘图对象中几乎都可以设置。
10. 旋转rotation
绘图元素旋转
fig=plt.figure(figsize=(4.5,3)) ax=fig.add_axes((0,0,1,1)) ax.plot(x,y1) for tick in ax.get_xticklabels(): tick.set_rotation(90) 复制代码
部分绘图元素是支持旋转的,可通过 set_rotation
方法设置或是创建时通过 rotation
参数设置,也有通过 angle
参数控制旋转的。
3D图像旋转
fig=plt.figure(figsize=(12,3)) ax=fig.add_subplot(131,title='ax1',projection='3d') ax.plot(x,y1) ax=fig.add_subplot(132,title='ax2',projection='3d') ax.view_init(30,80) ax.plot(x,y1) ax=fig.add_subplot(133,title='ax3',projection='3d') ax.view_init(60,120) ax.plot(x,y1) 复制代码
Axes3D
的旋转通过
view_init
方法实现,第一个参数
elev
控制纵向的旋转角度,默认值30;第二个参数
azim
控制横向的旋转角度,默认值120。
11. 子图布局调整adjust
#自动收缩布局 fig.tight_layout() #调整子图分布 fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.1, hspace=0.1) 复制代码
三. 常用绘图类型
1. 散点图
n = 100 x = np.random.randn(n) y = np.random.randn(n) z = np.random.randn(n) fig=plt.figure(figsize=(9,3)) ax=fig.add_subplot(121,title='2d scatter') ax.scatter(x,y,s=100,c=['g','r','y'],marker='*',alpha=0.5,linewidths=1,edgecolor='k') ax=fig.add_subplot(122,title='3d scatter',projection='3d') ax.scatter(x,y,z) plt.show() 复制代码
scatter
方法用于绘制散点图: 参数 s
设置点的大小(面积),默认 20
; 参数 c
设置点的颜色,可以是单个也可以多个,默认 'b'
蓝色; 参数 marker
设置点的样式,默认 'o'
圆; 参数 alpha
设置点的透明度,默认 1.
,值越小透明度越高; 参数 linewidths
设置边缘线的宽度,默认 None
; 参数 edgecolor
设置边缘线的颜色,默认 None
。
2. 曲线图
n = 100 x = np.arange(0,8*n,8) y = np.sin(x*np.pi/180) z = np.cos(x*np.pi/180) fig=plt.figure(figsize=(9,3)) ax=fig.add_subplot(121,title='2d plot') ax.plot(x,y,'g<-',alpha=0.5,linewidth=2, markersize=8) ax=fig.add_subplot(122,title='3d plot',projection='3d') ax.plot(x,y,z) plt.show() 复制代码
plot
方法用于绘制散点图: 参数
fmt
设置整体样式,紧跟坐标参数之后,是
c
、
marker
、
linestyle
三个参数的整合,用于快速设置,也可选择单独设置这三个参数; 参数
c
设置线和标记的颜色,只能是单个颜色,默认
'b'
蓝色; 参数
marker
设置标记样式,默认
None
; 参数
linestyle
设置线条样式,默认
'-'
实线; 参数
alpha
设置点的透明度,默认
1.
,值越小透明度越高; 参数
linewidth
设置线的宽度; 参数
markersize
设置标记的大小。
3. 曲面图
#曲面图 n = 480 x = np.arange(n) y = np.arange(n) x,y = np.meshgrid(x,y) z = np.cos(x*np.pi/180)+np.sin(y*np.pi/180) fig=plt.figure() ax=fig.add_subplot(111,title='3d surface',projection='3d') ax.plot_surface(x,y,z,rstride=10,cstride=10,cmap=plt.cm.winter) plt.show() 复制代码
plot_surface
方法用于绘制曲面图: 参数
rstride
和
cstride
设置x、y轴方向上的采样步长,被采样的数据才会用于曲面的绘制,值越小表示采样精度越高,绘制的图像越精细,绘制时间也更长,与
rcount
和
ccount
参数不兼容; 参数
rcount
和
ccount
设置x、y轴方向上的采样总数,默认50; 参数
cmap
设置曲面颜色集,需要是
colormap
,默认蓝色单色渐变; 参数
alpha
设置点的透明度,默认1.,值越小透明度越高。
绘制曲面图需要构造xy平面上的网格数据以及对应的z值,可使用numpy的 mgrid
索引器或 meshgrid
方法实现。
4. 条形图
x = np.array([1,2,3,4]) y1 = np.array([4,3,3,1]) y2 = np.array([2,5,1,3]) tick_label = ['a','b','c','d'] fig=plt.figure(figsize=(10,3)) ax=fig.add_subplot(131,title='2d bar') ax.bar(x+0.15,y1,width=0.3,color='y',label='y1',alpha=0.7, tick_label=tick_label) ax.bar(x-0.15,y2,width=0.3,color='g',label='y2',alpha=0.7, tick_label=tick_label) ax.legend() ax=fig.add_subplot(132,title='2d bar in 3d axes',projection='3d') ax.bar(x,y1,0,'y',label='y1',edgecolor='k',linewidth=1) ax.bar(x,y2,1,'y',label='y2',edgecolor='k',linewidth=1) ax.legend(facecolor='none') ax=fig.add_subplot(133,title='3d bar',projection='3d') bar3d1=ax.bar3d(x,0,0,0.5,0.25,y1,label='y1') bar3d2=ax.bar3d(x,1,0,0.5,0.25,y2,label='y2') bar3d1._facecolors2d=bar3d1._facecolors3d bar3d1._edgecolors2d=bar3d1._edgecolors3d bar3d2._facecolors2d=bar3d2._facecolors3d bar3d2._edgecolors2d=bar3d2._edgecolors3d ax.legend() plt.show() 复制代码
bar
方法用于绘制条形图(水平条形图请使用 barh
):
2D
第一个参数 x
是条形的横坐标,对齐的基准由 align
参数设置,默认是与中心对齐; 第二个参数 height
设置条形的高度; 第三个参数 width
设置条形的宽度; 第四个参数 bottom
设置条形底部的起始纵坐标,默认0; 参数 color
设置条形的颜色; 参数 tick_label
设置横坐标刻度标签; 参数 edge_color
和 linewidth
设置边缘线的颜色和粗细; 参数 label
设置此次绘制的类别标签; 参数 alpha
设置点的透明度,默认1.,值越小透明度越高。
2d条形图在绘制时视需要调整x的值,不然多次绘制的条形会重叠在一起。
2D in Axes3D
第一个参数 left
设置条形的起始横坐标,相当于2d情况下设置 align='edge'
; 第二个参数 height
设置条形的高度,与2d情况下一样; 第三个参数 zs
设置z轴的取值; 第四个参数 zdir
设置作为z轴的轴,默认 'z'
; 其余拓展参数和2d的一样。
3D
第1,2,3个参数 x
, y
, z
设置条形的位置坐标; 第4,5,6个参数 dx
, dy
, dz
设置条形的长宽高; 其余拓展参数和2d的一样。
3D条形图需要显示图例时必须为 _facecolors2d
、 _edgecolors2d
赋值,因为生成图例使用的是2d的色彩设置,这应该是一个bug。
5. 直方图
x = np.random.randn(1000) y = np.random.randn(1000) fig=plt.figure(figsize=(9,3)) ax=fig.add_subplot(121,title='hist') result1=ax.hist(x,bins=20,color="g",edgecolor="k",alpha=0.5,density=True) ax=fig.add_subplot(122,title='hist2d') result2=ax.hist2d(x,y,bins=20) plt.show() 复制代码
hist
方法用于绘制直方图: 第1个参数
x
设置需要统计的数据,
y
轴数据是统计频次,自动计算不需要自行设置; 第2个参数
bins
设置分箱数量,即分成多少个等间隔的统计区间,默认10; 参数
color
或
facecolor
设置条形的颜色;参数
edgecolor
设置边缘线的颜色; 参数
density
设置是否归一化,False时统计频次,True时统计概率密度,默认False; 参数
alpha
设置点的透明度,默认1.,值越小透明度越高。
hist2d
方法用于绘制二维直方图: 第1,2个参数 x
, y
设置需要统计的数据,二维直方图中统计频次以颜色来体现; 第3个参数 bins
设置分箱数量,即分成多少个等间隔的统计区间,默认10, x
, y
可以分别设置; 参数 cmap
设置颜色集。
调用绘图方法后会得到返回值:频次和频率的统计结果。
6. 饼图/环图
x1 = np.array([1,2,3,4]) x1_labels = ['a','b','c','d'] x1_explode = [0.2,0,0,0] x2 = np.array([2,2,1,5]) fig=plt.figure(figsize=(9,4)) ax=fig.add_subplot(121,title='pie') ax.pie(x1,explode=x1_explode,labels=x1_labels,shadow=True,autopct='%1.1f%%') ax=fig.add_subplot(122,title='ring') ax.pie(x1,radius=1,wedgeprops=dict(width=0.3, edgecolor='w')) ax.pie(x2,radius=0.7,wedgeprops=dict(width=0.3, edgecolor='w')) plt.show() 复制代码
pie
方法用于绘制饼图: 第一个参数 x
设置每个扇形的比重,会自动计算x/sum(x)应用于绘制,但在sum(x)<1时,不会进行该计算; 第二个参数 explode
设置每个扇形偏离中心的距离,默认None; 第三个参数 labels
设置每个扇形的标签; 第四个参数 colors
设置颜色序列,绘制扇形时会轮流使用该序列中的颜色; 参数 shadow
设置是否绘制阴影,默认False; 参数 labeldistance
设置扇形标签与中心的距离; 参数 radius
设置扇形的半径,默认为1; 参数 autopct
设置扇形上显示的信息,可以是一个字符串格式或是一个函数; 参数 wedgeprops
设置扇形的样式,其中 width
是宽度,与 radius
一致时绘制出来的就是饼图,小于 radius
则是环图, edgecolor
和 linewidth
可以设置边缘线的颜色和宽度; 参数 center
设置饼图的中心,默认(0,0)。
7. 箱线图
def test_data(): spread = np.random.rand(50) center = np.ones(25) * 0.5 flier_high = np.random.rand(10)+1 flier_low = np.random.rand(10)-1 return np.r_[spread,center,flier_high,flier_low] x1 = test_data() x2 = test_data() fig=plt.figure() ax=fig.add_subplot(111,title='box') ax.boxplot([x1,x2],labels=['x1','x2'],widths=0.3) plt.show() 复制代码
boxplot
方法用于绘制箱线图: 第一个参数
x
设置用于绘图的数据,当有多组时可以放在一个list中传入; 参数
labels
设置每组数据的类别标签; 参数
width
设置图形的宽度。
8. 等高线图
x = np.arange(-3,3,0.01) y = np.arange(-3,3,0.01) x,y = np.meshgrid(x,y) z = (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)+1 fig=plt.figure(figsize=(13.5,3)) ax=fig.add_subplot(131,title='2d contourf') c=ax.contour(x,y,z,colors='k',linewidths=0.5) ax.clabel(c,fontsize=10) cf=ax.contourf(x,y,z,cmap='YlOrRd') cbar=fig.colorbar(cf) ax=fig.add_subplot(132,title='3d contourf',projection='3d') ax.contourf(x,y,z,cmap='YlOrRd') ax.contour(x,y,z,colors='k',linewidths=0.2) ax=fig.add_subplot(133,title='3d surface with contour',projection='3d') ax.plot_surface(x,y,z,cmap='YlOrRd',alpha=0.7) ax.contour(x,y,z,colors='k',linewidths=1) plt.show() 复制代码
contour
方法用于绘制等高线图: 第1,2,3个参数 x
, y
, z
设置用于绘图的数据, z
是高度; 第4个参数 levels
设置等高线的数量; 参数 colors
设置等高线使用的颜色序列; 参数 linewidths
设置等高线的宽度序列; 参数 linestyles
设置等高线的样式序列。
contourf
方法用于填充等高线图: 第1,2,3个参数 x
, y
, z
设置用于绘图的数据, z
是高度; 第4个参数 levels
设置等高线的数量; 参数 cmap
设置用于填充的颜色集; 参数 alpha
设置点的透明度,默认1.,值越小透明度越高。
clabel
方法用于设置等高线标签; colorbar
方法用于设置参考颜色条;
9. 极坐标图
theta=np.linspace(0,2*np.pi,100) fig=plt.figure(figsize=(10,5)) ax=fig.add_subplot(121,title='polar1',projection='polar') ax.plot(theta,theta,c='b',lw=2) ax.set_rmax(theta.max()) ax=fig.add_subplot(122,title='polar2',projection='polar') ax.plot(theta,theta,c='r',lw=2) ax.set_rmax(theta.max()) ax.set_rlabel_position(90) ax.set_theta_offset(np.pi) ax.set_thetagrids(np.arange(0,360,15)) ax.set_rticks(np.arange(0,6.5,0.5)) ax.set_theta_direction(-1) 复制代码
通过设置 projection='polar'
创建 PolarAxes
坐标轴,即可实现极坐标作图: set_rmax
, set_rmin
, set_rlim
方法分别可以设置极径的最大值,最小值,以及范围; set_rlabel_position
方法设置极径标签的位置,以角度表示; set_theta_offset
方法设置角度的偏移量,以弧度表示; set_thetagrids
方法设置角度刻度序列,会影响网格线; set_rticks
方法设置极径刻度序列,会影响网格线; set_theta_direction
方法设置角度增长方向。
在调用 plot
等方法绘图时,原本的 x
和 y
分别对应到角度和极径。
四. 其他绘图元素
1. 注解annotate
fig=plt.figure(figsize=(10,3.5)) ax=fig.add_subplot(121,title='annotate') ax.scatter([-0.25],[-0.25],s=100) ax.set_xlim([-1,1]) ax.set_ylim([-1,1]) bbox_style = dict(boxstyle="square", fc='white', ec='black',lw=1) arrow_style = dict(arrowstyle='->',color='black',lw=2) ax.annotate('This is a dot.',(-0.24,-0.24),(-0.14,0.16), arrowprops=arrow_style,bbox=bbox_style,fontsize=15) ax=fig.add_subplot(122,title='arrow+text') ax.scatter([-0.25],[-0.25],s=100) ax.set_xlim([-1,1]) ax.set_ylim([-1,1]) ax.arrow(0.09,0.06,-0.25,-0.23,fc='k',ec='k', width=0.01,head_width=0.07,head_length=0.07) ax.text(-0.14,0.16,'This is a dot.',fontsize=15,bbox=bbox_style) 复制代码
annotate
方法用于向图像上添加注解: 第一个参数
s
设置注释的文本; 第二个参数
xy
设置要注释的点位置,
tuple
类型表示的坐标; 第三个参数
xytext
设置注释文本的位置,
tuple
类型表示的坐标; 参数
xycoords
和
textcoords
设置注释点位置和文本位置所采用的坐标系,默认
'data'
和数据的坐标系一致; 参数
arrowprops
设置箭头,
dict
类型,其中
arrowstyle
属性设置样式,
color
属性设置颜色,
lw
属性设置箭头宽度; 以上三个参数具体信息建议参考官方文档-annotate; 参数
bbox
设置文本框样式,
dict
类型,其中
boxstyle
属性设置样式,
fc
属性设置填充颜色,
ec
属性设置边缘颜色,
lw
属性设置边缘线宽度;
bbox
中的详细设置建议参考官方文档-Rectangle; 参数
fontsize
设置字体大小。
注解也可通过 arrow
+ text
实现。
arrow
方法用于添加箭头: 第1,2个参数 x
, y
设置箭头的起始位置; 第3,4个参数 dx
, dy
设置箭头往xy方向延伸的长度; fc
参数设置填充颜色; ec
参数设置边缘颜色; width
参数设置箭头线宽度; head_width
参数设置箭头头部的宽度; head_length
参数设置箭头头部的长度。
text
方法用于添加文本: 第1,2个参数 x
, y
设置文本的位置; 第3个参数 s
设置要显示的文本; 参数 fontsize
设置字体大小; 参数 bbox
设置文本框样式,与 annotate
相同。
arrow
绘制的箭头在有所倾斜时无法保证头部的底部与线垂直,对此有要求只能使用 annotate
。
2. 区域填充fill
x=np.arange(0,720,1) y1=np.sin(x*np.pi/180) y2=np.cos(x*np.pi/180) fig=plt.figure(figsize=(10,3.5)) ax=fig.add_subplot(121,title='fill') ax.plot(x,y1) ax.plot(x,y2) ax.fill(x,y1,color='g',alpha=0.3) ax.fill(x,y2,color='b',alpha=0.3) ax=fig.add_subplot(122,title='fill between') ax.plot(x,y1) ax.plot(x,y2) ax.fill_between(x,y1,y2,color='g',alpha=0.3) 复制代码
fill
方法用于填充多边形: 第1,2个参数
x
,
y
设置边的xy坐标,该绘图方法不适合填充不封闭的曲线,会如上图出现无法预估的绘制效果。
fill_between
方法用于填充两条曲线中间的区域: 第1,2,3个参数 x
, y1
, y2
设置x坐标和两条曲线的y坐标; 第4个参数 where
设置绘制的横坐标范围,布尔数组类型,相当于对前三个参数执行索引筛选。
3. 图片image
from PIL import Image image1=Image.open('D:\\training_data\\used\\cifar-10-batches-py\\test\\1_猫.png') image2=Image.open('D:\\training_data\\used\\cifar-10-batches-py\\test\\2_船.png') fig=plt.figure(figsize=(8,4)) ax=fig.add_subplot(121,title='image1') ax.imshow(image1) ax=fig.add_subplot(122,title='image2') ax.imshow(image2) 复制代码
imshow
用于显示图片,默认是会显示坐标轴和刻度的,可通过 Axes.axis('off')
关闭。
4. 基本图形patch
import matplotlib.patches as patches from matplotlib.collections import PatchCollection fig=plt.figure(figsize=(9,3)) ax=fig.add_subplot(121,title='Rectangle') rects=[] x=[1.5,3.5,5.5,] y=[3,4.5,3] for i in range(3): rect=patches.Rectangle((x[i],y[i]),3,3) rects.append(rect) pc=PatchCollection(rects,linewidth=1,edgecolor='r',facecolor='none') #ax.add_patch(rect) ax.add_collection(pc) ax.set_xlim([0,10]) ax.set_ylim([0,10]) ax=fig.add_subplot(122,title='Ellipse') ells=[] for i in range(5): ell=patches.Ellipse((5,5),6,3,angle=i*36) ells.append(ell) pc=PatchCollection(ells,facecolor='g',alpha=0.5) #ax.add_patch(ell) ax.add_collection(pc) ax.set_xlim([0,10]) ax.set_ylim([0,10]) 复制代码绘制基本图形和相应集合需要导入
patches
和
PatchCollection
。
patches
提供了各种图形的构造: Rectangle
是矩形类,第1个参数 xy
设置左下角顶点的坐标,第2,3个参数 width
, height
设置宽度和高度,第4个参数 angle
设置旋转角度; Ellipse
是椭圆类,第1个参数 xy
设置椭圆中心的坐标,第2,3个参数 width
, height
设置横轴和竖轴的长度(直径),第4个参数 angle
设置旋转角度。
PatchCollection
用于构造 patches
集合并设置通用的拓展参数: linewidth
参数设置边缘线宽; edgecolor
参数设置边缘颜色; facecolor
参数设置填充颜色, facecolor='none'
可以设置不填充(在创建图形类时, fill=False
也能设置不填充); alpha
参数设置透明度。
add_patch
用于向 Axes
中添加单个图形; add_collection
用于向 Axes
中添加图形集合; Axes.patches
可以查看 Axes
下的所有 Patch
绘图对象; Axes.collections
可以查看 Axes
下的所有绘图集合。
5. 数据表格table
data=np.array([[1,2,3],[4,5,6],[7,8,9]]) row_labels=['row1','row2','row3'] row_colors=plt.cm.BuPu(np.linspace(0, 0.5, len(row_labels))) col_labels=['col1','col2','col3'] col_index=np.arange(3) fig=plt.figure() ax=fig.add_subplot(111,title='table') for i in range(len(row_labels)-1,-1,-1): ax.bar(col_index,data[i],color=row_colors[i],linewidth=0.5,edgecolor='k') ax.table(cellText=data, rowLabels=row_labels, rowColours=row_colors, colLabels=col_labels, loc='bottom') ax.set_xticks([]) 复制代码
table
方法用于添加表格: cellText
参数设置单元格数据,二维序列类型,默认 None
; cellColors
参数设置单元格颜色,二维序列类型,默认 None
; cellText
和 cellColors
两个参数至少有一个要赋值; cellLoc
参数设置单元格位置,默认 'right'
; colWidths
参数设置列宽,一维序列类型,可选; rowLabels
参数设置行标签,一维序列类型,可选; rowColors
参数设置行标签颜色,一维序列类型,可选; rowLoc
参数设置行标签位置,默认 'left'
; colLabels
参数设置列标签,一维序列类型,可选; colColors
参数设置列标签颜色,一维序列类型,可选; colLoc
参数设置列标签位置,默认 'center'
; loc
参数设置表格位置,默认 bottom
; bbox
参数设置方框样式,可选。
更详细的设置可以自行创建 Table
对象,通过 Axes.add_table
方法添加; Axes.tables
可以查看 Axes
下的所有 Table
绘图对象。
以上所述就是小编给大家介绍的《[python][科学计算][matplotlib]使用指南》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- [python][科学计算][numpy]使用指南
- [python][科学计算][pandas]使用指南
- RecyclerView使用指南(一)—— 基本使用
- RVM 使用指南
- HIVE 使用指南
- HIVE 使用指南
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。