受this question的启发,我一直在尝试绘制没有间隙的图像。
在我的玩具例子中,我想把四个图像分成两行,它们有不同的形状:不同的行数,* 相同的列数 *。尽管存在差异,但它们应适合于一个没有间隙的单一图形,如下图所示:
但是,当我试图将它们放在一起时,设置plt.subplots_adjust(wspace=0, hspace=0)
并不能实现这一点,因为图像具有不同的形状。
代码如下:
from numpy.random import rand
import matplotlib.pyplot as plt
test_data = [[rand(10,10), rand(10,10)],[rand(5,10), rand(5,10)]]
f, axarr = plt.subplots(2,2)
for i in range(2):
for j in range(2):
axarr[i, j].imshow(test_data[i][j])
plt.tight_layout()
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
我试过使用set_aspect
和equal
,但没有成功。
有谁知道如何消除这些漏洞吗?
2条答案
按热度按时间aurhwmvo1#
您可以使用
plt.subplots
调用中的gridspec_kw
参数设置子图的height_ratios
,并使用不同图像的高度来设置该比率。从文档到
plt.subplots()
:gridspec_kw:dict,可选
传递给GridSpec构造函数的Dict,该构造函数用于创建放置子图的网格。
请注意,您的示例具有默认matplotlib图像大小的精确长宽比,因此在添加更多行或更改图像形状之前,您不会注意到出现任何间隙。
因此,要将其扩展为通用解决方案,您需要根据图像的形状设置图形大小。例如,让我们将示例扩展为3行,2列。我们还将显式设置图形宽度为8英寸,并根据图像大小调整高度。
wswtfjt72#
可以将所有图像合并到一个数组中,然后使用
imshow
进行绘图。为了确保图像周围没有额外的间距,我们需要计算纵横比并相应地设置图形大小。