Matplotlib:以2行绘制的3个图,单个图像居中

时间:2016-03-14 17:35:29

标签: python matplotlib

我有一个3位数的情节。我想有两排图像,顶行有2个图,底部有1个。我需要在第二行中对齐单个图。

fig, ax = plt.subplots(nrows=2, ncols=2)
x = np.arange(0.01,1.01,0.01)
y = np.arange(0.01,1.01,0.01)
X,Y = np.meshgrid(x, y) # grid of point
Z = 1/((1/X)+(1/Y)-1)
F = Y / X
values = [0.3, 0.5, 0.8, 1.0, 1.3, 1.5, 2.0, 3.0, 5.0, 10.0]

#Plot 0
ax[0,0].set_aspect('equal')
CS = ax[0,0].contour(X,Y,Z,np.arange(0.1,1.0,0.1),colors='black',linewidths=0.7)
ax[0,0].clabel(CS, fontsize=12, fmt='%1.1f', inline=1)
CS = ax[0,0].contour(X,Y,F,values,colors='blue', linewidths=0.7)
ax[0,0].clabel(CS, fontsize=12, fmt='%1.1f', inline=1)

#Plot 1
ax[0,1].set_aspect('equal')
CS = ax[0,1].contour(X,Y,Z,np.arange(0.1,1.0,0.1),colors='black',linewidths=0.7)
ax[0,1].clabel(CS, fontsize=12, fmt='%1.1f', inline=1)
CS = ax[0,1].contour(X,Y,F,values,colors='blue', linewidths=0.7)
ax[0,1].clabel(CS, fontsize=12, fmt='%1.1f', inline=1)

#Plot 2
ax[1,0].set_aspect('equal')
CS = ax[1,0].contour(X,Y,Z,np.arange(0.1,1.0,0.1),colors='black',linewidths=0.7)
ax[1,0].clabel(CS, fontsize=12, fmt='%1.1f', inline=1)
CS = ax[1,0].contour(X,Y,F,values,colors='blue', linewidths=0.7)
ax[1,0].clabel(CS, fontsize=12, fmt='%1.1f', inline=1)

例如,图2位于第二行,我希望它位于第二行的中心,但与其他2个图的大小相同。

提前致谢

1 个答案:

答案 0 :(得分:3)

您可以使用gridspec.Gridspec()。这里的诀窍是创建一个规则的网格,但不是在每个单元格中都有一个图。例如,在这种情况下,我创建了一个2x4单元网格。每个图表跨越2个单元格。所以在第一行,我有2个图(2x2个单元格)。在第二行,我有一个空单元格,1个绘图(1x2单元格)和另一个空单元格。

import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 4)
gs.update(wspace=0.5)
ax1 = plt.subplot(gs[0, :2], )
ax2 = plt.subplot(gs[0, 2:])
ax3 = plt.subplot(gs[1, 1:3])
plt.show()

enter image description here