Python----matplotlib子区(子图)划分相关函数(7类/图文总结)
matplotlib子区划分函数:subplot()、subplots()、add_subplot()、subplot2grid()、gridspec()、axes()、add_axes()Python----matplotlib子区划分函数(7类)①subplot()语法:plt.subplot(rows,cols,plotNum)使用:plt.subplot(2,2,1)plt.subplot
matplotlib子区划分函数(按顺序):subplot()、subplots()、subplot2grid()、GridSpec()、axes()、add_axes()、add_subplot()
Python----matplotlib子区(子图)划分函数(7类)
在查阅书本和有关资料后,我对matplotlib子区划分函数做了以下总结,例子是自己举的,如果发现有差漏的地方后续会进行修改。
①subplot():绘制几何形状相同的子区布局.
语法:
-
plt.subplot(rows,cols,plotNum)
括号里的数值依次表示行数、列数、第几个。
使用:
plt.subplot(2,2,1)
或
-
plt.subplot(221)
如(221)表示划分为2行2列,取其第一个。子区编号从左上角为1开始,序号依次向右递增。
②subplots():创建一张画布且带有多个子区.
语法:
-
plt.subplots(rows,cols)
括号里的数值表示行数、列数。
使用:
fig,ax = plt.subplots(1,2)
ax[0].plot([1,2],[1,3])
ax[1].plot([1,2],[1,3])
或fig = plt.figure(figsize=(6,6))
ax = fig.subplots(1,2)
ax[0].plot([1,2],[1,3])
ax[1].plot([1,2],[1,3])
subplots()函数的返回值是一个画布对象fig和一个或多个坐标轴实例对象axis(简写为ax)。当坐标轴实例对象为一个时,其返回值为元组(fig,ax);当坐标轴实例对象为多个时,其返回值为(fig,[ax1,ax2,…]),如
fig,ax = plt.subplots(2,2)
ax[0,1].plot([1,2],[1,3])
③subplot2grid():合并子区布局.
语法:
-
plt.subplot2grid( (rows,cols),(rowNum,colNum),colspan=value,rowspan=value )
括号里的值依次表示(行数,列数),(行号,列号),属性(rowspan或)colspan表示(行)列合并,value指需要合并的(行)列数。
使用:
-
plt.subplot2grid((3,2),(0,1),rowspan=2)
(3,2)表示划分为3行2列,(0,1)表示取第0行第1列的子区,rowspan=2表示合并当前子区与其下方一行对应的子区(colspan则是与右方列合并)。
当其下方没有行可合并时,rowspan语句失效,如
ax1 = plt.subplot2grid((2,2),(0,0),rowspan=2)
ax2 = plt.subplot2grid((2,2),(1,1),rowspan=2)
ax1.plot([3,2],[1,2])
ax2.plot([3,2],[1,2])#ax2合并失效
④GridSpec():指定子区位置布局.
GridSpec()是matplotlib库里gridspec模块下的一个类。
语法:
-
import matplotlib.gridspec as gs
gs = gs.GridSpec(rows,cols)
ax3 = plt.subplot(gs[rowsNum,colsNum])(rows,cols)表示(行数,列数);
[rowsNum,colsNum]表示 [行号,列号]。
使用:
-
import matplotlib.gridspec as gs
gs = gs.GridSpec(4,4)
ax1 = plt.subplot(gs[1:3,1])
ax2 = plt.subplot(gs[0,3])
ax3 = plt.subplot(gs[0,:3])
ax4 = plt.subplot(gs[3,0:])
****注意:在冒号后的是开区间,如0:3指0、1、2。
GridSpec()可以说是在subplot2grid() 的基础上简化了重复书写行列数,并更灵活地运用索引去进行合并,使得子区的布局更简便。
⑤axes():在画布中的任意位置添加坐标轴.
添加坐标轴的方法类似是添加了新的子区,但实际上子区需要通过划分产生。
语法:
-
plt.axes( [left,bottom,width,height], frameon=True, facecolor=“r” )
[left,bottom,width,height]依次表示添加的坐标轴的(left)左侧边缘和(bottom)底部边缘距离画布边缘的位置,(width)坐标轴的宽度和(height)坐标轴的高度;
frameon表示是否绘制坐标轴的四条轴脊;
facecolor表示填充坐标轴的背景色。
使用:
- fig = plt.figure(figsize=(5,6),facecolor="#9B9B9B") #背景灰色
fig.subplots(2,2) #为了更好地看出axes的效果,这里设置了子区
plt.axes( [0.4,0.4,0.3,0.3], frameon=True, facecolor="#6BBBEC" )
使用axes()可以在画布的任意位置添加坐标轴,但是需要注意其坐标轴的长宽比会受画布长宽比的影响。
如本例中设置的(默认的画布大小也是长比宽大一点)画布长宽比是5:6,给axes()设置的长宽为0.3和0.3,其显示出来的并不是正方形而是长方形;若想让axes()显示为正方形,只需要设置画布为正方形或者将axes()的宽度相应增大。
⑥ add_axes()和add_subplot():需用画布实例调用.
add_axes()和add_subplot()的本质语义与axes()和subplot()的语义是一样的,都是添加坐标轴和添加子区,但是多了add后,它们在调用时就产生了一点差别。
-
add_axes()
使用:
fig = plt.figure(figsize=(4,4),facecolor="#9B9B9B") #背景灰色 fig.subplots(1,2) ##为了更好地看效果,这里设置了子区 plt.axes([1,1,0.3,0.3],facecolor="black")`
fig.add_axes( [0,0, 0.3,0.3], facecolor="red" )
调换 axes()和add_axes()的位置:fig.add_axes([1,1,0.3,0.3],facecolor="black")
plt.axes([0,0,0.3,0.3], facecolor="red" )
无论是用add_axes还是axes()来添加新坐标轴,它们的执行结果都是一样的。只是add_axes()需要用画布实例fig去调用,不能直接用plt调用。
-
add_subplot()
使用:
fig = plt.figure(figsize=(4,4),facecolor="#9B9B9B") plt.subplot(2,1,1)
fig.add_subplot(1,3,3,facecolor="#6BBBEC")
add_subplot()同样需要用画布实例fig去调用,不能直接用plt调用,但是add_subplot()与subplot()相比,在显示结果上明显多了add的功能,因为同时调用两个plt.subplot()是不能增加新子区的(只是后面的plt.subplot()覆盖了前面的),但是通过add_subplot()就可以添加新子区。 -
总的来说,我在运用add_axes()和add_subplot()时觉得比较方便的地方是可以使用fig实例去调用,这样当存在两个或两个以上的画布时,通过fig1,fig2,…去调用就比较清晰。
完
更多推荐
所有评论(0)