我需要在matplotlib中创建多个大小不等的列和行。这是示例代码:
a = np.random.rand(20, 20)
b = np.random.rand(20, 5)
c = np.random.rand(5, 20)
d = np.random.rand(5,5)
arrays = [a,b,c,d]
fig, axs = plt.subplots(2, 2, sharex='col', sharey= 'row', figsize=(10,10))
for ax, ar in zip(axs.flatten(), arrays):
ax.imshow(ar)
但是,我得到了这个结果。
右列的第一行和第二行的宽度不相等,我希望它们相等(基本上缩小右下角的图像,使其具有与其他图像相同的比例)。 我已经研究了相当多的内容,但似乎没有任何效果。我试过tight_layout(),还有其他格式化技巧,但都无济于事...
答案 0 :(得分:0)
您可以使用gridspec的height_ratios
和width_ratios
参数来设置子图应占据的所需比例。
在这种情况下,由于对称性,这仅仅是形状,例如b
。
import numpy as np
import matplotlib.pyplot as plt
a = np.random.rand(20, 20)
b = np.random.rand(20, 5)
c = np.random.rand(5, 20)
d = np.random.rand(5,5)
arrays = [a,b,c,d]
fig, axs = plt.subplots(2, 2, sharex='col', sharey= 'row', figsize=(10,10),
gridspec_kw={"height_ratios" : b.shape,
"width_ratios" : b.shape})
for ax, ar in zip(axs.flatten(), arrays):
ax.imshow(ar)
plt.show()
或更普遍地
gridspec_kw={"height_ratios" : [a.shape[0], c.shape[0]],
"width_ratios" : [a.shape[1], b.shape[1]]}