我有一个三位数的情节。我想有两行图像,第一行有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个图的大小相同。
提前致谢
最佳答案
您可以使用 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()
关于python - Matplotlib:3幅图以2行绘制,单幅图像居中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35994306/