我有个准则
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
def format_axes(fig):
for i, ax in enumerate(fig.axes):
ax.text(0.5, 0.5, "ax%d" % (i+1), va="center", ha="center")
ax.tick_params(labelbottom=False, labelleft=False)
# gridspec inside gridspec
fig = plt.figure()
gs0 = gridspec.GridSpec(2, 2, figure=fig)
gs00 = gs0[0,0].subgridspec(2, 3, wspace=0)
ax1 = fig.add_subplot(gs00[:, :-1])
ax2 = fig.add_subplot(gs00[0, -1])
gs01 = gs0[0,1].subgridspec(2, 3, wspace=0)
ax3 = fig.add_subplot(gs01[:, :-1])
ax4 = fig.add_subplot(gs01[0, -1])
gs10 = gs0[1,0].subgridspec(1, 1)
ax5 = fig.add_subplot(gs10[0, 0])
gs11 = gs0[1,1].subgridspec(1, 1)
ax6 = fig.add_subplot(gs11[0, 0])
format_axes(fig)
for ax in fig.axes:
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.tight_layout()
plt.show()
得到draft of the figure。
我需要用任意形状的图像填充这些子图,就像这样
img1 = np.random.rand(10, 20)
img2 = np.random.rand(15, 25)
img3 = np.random.rand(20, 30)
img4 = np.random.rand(25, 35)
img5 = np.random.rand(30, 40)
img6 = np.random.rand(35, 45)
ax1.imshow(img1)
ax2.imshow(img2)
ax3.imshow(img3)
ax4.imshow(img4)
ax5.imshow(img5)
ax6.imshow(img6)
但是它改变了子图的位置和它们的宽高比(here)。我还需要保持图像的宽高比。
我如何绘制它并保持对齐和纵横比?
我试图手动扩展我的图像,使它们具有与草图中的子图相同的长宽比。在我看来,它可以解决对齐问题。但我没有成功地提取这些长宽比。
1条答案
按热度按时间fhity93d1#
IIUC需要在调用中指定
aspect
参数,可以使用axis.set_aspect,也可以在ax.imshow中显式设置aspect
。输出: