[python][科学计算][matplotlib]使用指南

栏目: Python · 发布时间: 6年前

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 参数可以设置字体大小, xy 参数设置位置坐标,取值为0.~1.的相对于 Figure 的宽和高的比例。

Figure 上无法直接绘图,需要至少添加一个 Axes ,在调用 plt 的静态方法绘图时,会绘制在最近声明的一个 Figure 上,不显示声明则会自动按默认配置创建 FigureAxesplt.gcf() 方法可以获取当前正在绘制的 Figure

Figure.axes 可以获取图像下的所有 AxesFigure.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)
复制代码
[python][科学计算][matplotlib]使用指南
#方法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)
复制代码
[python][科学计算][matplotlib]使用指南

Axes 的意思是用于绘图的坐标轴, AxesSubplot 是封装了 Axes 的子图,通过不同的方法创建,子图在布局上更方便,绘图时则没有明显的区别,下面会将 Axes 也称作子图。

绘制不同图像会使用不同轴类型,最常用的xy坐标轴和xyz坐标轴分别为 AxesAxes3D 。如果只需要一个 Axes ,可以不显示声明,直接调用 plt 的静态方法绘制, Axes 会被自动创建(通过 add_subplot(111) )。当存在多个 Axes 时,可以调用 Axes 的方法绘图以保证图像被绘制在正确的子图上,调用静态方法绘制时实际上是通过 plt.gca() 获取了最后声明的 Axes

Axes.plot 是绘图方法,用于绘制曲线图。 Axes 在绘图时需要提供x,y两个轴的坐标,而 Axes3D 需要提供x,y,z三个轴的坐标,上方的例子中没有提供z轴坐标所以图像被绘制在高度为0的一个平面上。

Axes 是绑定在 Figure 上的,可通过调用 Figureadd_axesadd_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 对应 235title 参数用于设置子图的标题,也可通过 Axes.set_titleplt.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()
复制代码
[python][科学计算][matplotlib]使用指南
plt.plot(x,y1)
plt.show()
plt.plot(x,y2)
plt.show()
复制代码
[python][科学计算][matplotlib]使用指南
[python][科学计算][matplotlib]使用指南
plt.show() 方法用于显示已绘制的图像,一般配合 plt 的静态绘图方法使用(即不显示声明 Figure 的情况)。在使用静态方法绘图时,如果不调用 show ,则代码段的中所有绘图元素将会绘制在自动创建的同一 Figure 的同一 Axes

上。

在ipython中,直接输入 Figure 的变量名也可以将其图像显示出来;在执行一段含绘图语句的代码段后,也会自动显示图像。

4. 保存save

fig.savefig('D:\\test.jpg')
复制代码

Figuresavefig 方法可以保存图片至指定路径,也可调用 plt 的静态方法保存,但必须和绘图的代码一起执行,且必须在 show 方法之前执行。

ipython中直接右键显示出来的图片也有保存的选项。

二. 绘图设置

1. 投影projection

projection 参数用于设置生成的 Axes 类型,在 add_axesadd_subplot 等方法中可使用。

常用的几个类型: 'rectilinear' :直线坐标轴,即2d的xy坐标轴,默认值; '3d' :3D的xyz坐标轴,绘制3d图像会使用这个,注意,使用该类型前必须先导入 Axes3D'polar' :极坐标轴。

2. 字体font

plt.rcParams['font.sans-serif'] 属性用于设置默认字体,当图像中中文显示存在问题时,可通过该项将字体设置为支持中文的字体,例如 ['SimHei'] 黑体; plt.rcParams['font.size'] 属性用于设置默认字体大小。

也可以仅在特定文本上应用字体, fontsize 参数设置字体大小, fontproperties 参数设置字体,在 suptitleset_titletext 等用于定义文字显示的方法中可使用。

当负号无法正常显示时,设置 plt.rcParams['axes.unicode_minus']=False

3. 颜色color

多以 colorcolors 参数设置主体颜色或颜色序列,简写形式 c ,也有单独设置某个部分颜色的参数: facecolor 设置填充颜色,简写形式 fcedgecolor 设置边缘颜色,简写形式 ec

支持多种标识颜色的方式: (1). 以 tuple 表示的RGB或RGBA值,取值范围在0.~1.,例如 (0.1,0.2,0.5) ; (2). 以 str 表示的16进制的RGB或RGBA值,取值范围00~FF,例如 '#0F0F0F' ; (3). 以 str 表示的颜色标签,可参考下图(官方示例)。

[python][科学计算][matplotlib]使用指南

除了单个颜色外,matplotlib还提供了colormap,是特定主题的颜色集合,一般通过 cmap 参数设置,而预定义的colormap在 plt.cm 下,可用种类详见官方文档。

4. 标题title

Figure.suptitleplt.suptitle 方法用于设置总标题; Axes.set_titleplt.title 方法以及创建 Axes 时的 title 参数用于设置子标题。

5. 坐标轴axis

xlabelylabelzlabel 等方法用于设置坐标轴的标签; xticksytickszticks 等方法用于设置坐标轴的刻度,传入参数为刻度值列表和刻度标签列表,第二个参数可以省略,会以刻度值作为标签文字; xlimylimzlim 等方法用于设置坐标轴的范围,传入参数为开始值和结束值;

axis('off') 可以关闭坐标轴显示; 以上方法均可通过 Axesplt 调用。

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; 参数 smarkersize 设置标记大小。

标记样式可在散点图、曲线图等中设置。

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)
复制代码
[python][科学计算][matplotlib]使用指南
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()
复制代码
[python][科学计算][matplotlib]使用指南

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()
复制代码
[python][科学计算][matplotlib]使用指南
plot 方法用于绘制散点图: 参数 fmt 设置整体样式,紧跟坐标参数之后,是 cmarkerlinestyle 三个参数的整合,用于快速设置,也可选择单独设置这三个参数; 参数 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()
复制代码
[python][科学计算][matplotlib]使用指南
plot_surface 方法用于绘制曲面图: 参数 rstridecstride 设置x、y轴方向上的采样步长,被采样的数据才会用于曲面的绘制,值越小表示采样精度越高,绘制的图像越精细,绘制时间也更长,与 rcountccount 参数不兼容; 参数 rcountccount 设置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()
复制代码
[python][科学计算][matplotlib]使用指南

bar 方法用于绘制条形图(水平条形图请使用 barh ):

2D

第一个参数 x 是条形的横坐标,对齐的基准由 align 参数设置,默认是与中心对齐; 第二个参数 height 设置条形的高度; 第三个参数 width 设置条形的宽度; 第四个参数 bottom 设置条形底部的起始纵坐标,默认0; 参数 color 设置条形的颜色; 参数 tick_label 设置横坐标刻度标签; 参数 edge_colorlinewidth 设置边缘线的颜色和粗细; 参数 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()
复制代码
[python][科学计算][matplotlib]使用指南
hist 方法用于绘制直方图: 第1个参数 x 设置需要统计的数据, y 轴数据是统计频次,自动计算不需要自行设置; 第2个参数 bins 设置分箱数量,即分成多少个等间隔的统计区间,默认10; 参数 colorfacecolor 设置条形的颜色;参数 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()
复制代码
[python][科学计算][matplotlib]使用指南

pie 方法用于绘制饼图: 第一个参数 x 设置每个扇形的比重,会自动计算x/sum(x)应用于绘制,但在sum(x)<1时,不会进行该计算; 第二个参数 explode 设置每个扇形偏离中心的距离,默认None; 第三个参数 labels 设置每个扇形的标签; 第四个参数 colors 设置颜色序列,绘制扇形时会轮流使用该序列中的颜色; 参数 shadow 设置是否绘制阴影,默认False; 参数 labeldistance 设置扇形标签与中心的距离; 参数 radius 设置扇形的半径,默认为1; 参数 autopct 设置扇形上显示的信息,可以是一个字符串格式或是一个函数; 参数 wedgeprops 设置扇形的样式,其中 width 是宽度,与 radius 一致时绘制出来的就是饼图,小于 radius 则是环图, edgecolorlinewidth 可以设置边缘线的颜色和宽度; 参数 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()
复制代码
[python][科学计算][matplotlib]使用指南
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()
复制代码
[python][科学计算][matplotlib]使用指南

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)
复制代码
[python][科学计算][matplotlib]使用指南

通过设置 projection='polar' 创建 PolarAxes 坐标轴,即可实现极坐标作图: set_rmax , set_rmin , set_rlim 方法分别可以设置极径的最大值,最小值,以及范围; set_rlabel_position 方法设置极径标签的位置,以角度表示; set_theta_offset 方法设置角度的偏移量,以弧度表示; set_thetagrids 方法设置角度刻度序列,会影响网格线; set_rticks 方法设置极径刻度序列,会影响网格线; set_theta_direction 方法设置角度增长方向。

在调用 plot 等方法绘图时,原本的 xy 分别对应到角度和极径。

四. 其他绘图元素

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)
复制代码
[python][科学计算][matplotlib]使用指南
annotate 方法用于向图像上添加注解: 第一个参数 s 设置注释的文本; 第二个参数 xy 设置要注释的点位置, tuple 类型表示的坐标; 第三个参数 xytext 设置注释文本的位置, tuple 类型表示的坐标; 参数 xycoordstextcoords 设置注释点位置和文本位置所采用的坐标系,默认 '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)
复制代码
[python][科学计算][matplotlib]使用指南
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)
复制代码
[python][科学计算][matplotlib]使用指南

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])
复制代码
[python][科学计算][matplotlib]使用指南
绘制基本图形和相应集合需要导入 patchesPatchCollection

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([])
复制代码
[python][科学计算][matplotlib]使用指南

table 方法用于添加表格: cellText 参数设置单元格数据,二维序列类型,默认 NonecellColors 参数设置单元格颜色,二维序列类型,默认 NonecellTextcellColors 两个参数至少有一个要赋值; cellLoc 参数设置单元格位置,默认 'right'colWidths 参数设置列宽,一维序列类型,可选; rowLabels 参数设置行标签,一维序列类型,可选; rowColors 参数设置行标签颜色,一维序列类型,可选; rowLoc 参数设置行标签位置,默认 'left'colLabels 参数设置列标签,一维序列类型,可选; colColors 参数设置列标签颜色,一维序列类型,可选; colLoc 参数设置列标签位置,默认 'center'loc 参数设置表格位置,默认 bottombbox 参数设置方框样式,可选。

更详细的设置可以自行创建 Table 对象,通过 Axes.add_table 方法添加; Axes.tables 可以查看 Axes 下的所有 Table 绘图对象。


以上所述就是小编给大家介绍的《[python][科学计算][matplotlib]使用指南》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python for Data Analysis

Python for Data Analysis

Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99

Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具