我有一些numpy图像数组,所有相同的形状(比如(64,64,3))。我想用pyplot.subplot()
在网格中绘制它们,但是当我这样做时,即使使用pyplot.subplots_adjust(hspace=0, wspace=0)
,图像之间也会产生不需要的间距。下面是一段代码示例。matplotlib pyplot imshow图像之间的紧密间距
from matplotlib import pyplot
import numpy
def create_dummy_images():
"""
Creates images, each of shape (64, 64, 3) and of dtype 8-bit unsigned integer.
:return: 4 images in a list.
"""
saturated_channel = numpy.ones((64, 64), dtype=numpy.uint8) * 255
zero_channel = numpy.zeros((64, 64), dtype=numpy.uint8)
red = numpy.array([saturated_channel, zero_channel, zero_channel]).transpose(1, 2, 0)
green = numpy.array([zero_channel, saturated_channel, zero_channel]).transpose(1, 2, 0)
blue = numpy.array([zero_channel, zero_channel, saturated_channel]).transpose(1, 2, 0)
random = numpy.random.randint(0, 256, (64, 64, 3))
return [red, green, blue, random]
if __name__ == "__main__":
images = create_dummy_images()
for i, image in enumerate(images):
pyplot.subplot(2, 2, i + 1)
pyplot.axis("off")
pyplot.imshow(image)
pyplot.subplots_adjust(hspace=0, wspace=0)
pyplot.show()
以下是输出。
正如你所看到的,有那些图像之间不必要的垂直空间。避免这个问题的一种方法是仔细选择合适的尺寸,例如我在Jupyter Notebook中使用matplotlib.rcParams['figure.figsize'] = (_, _)
。但是,我通常要绘制的图像数量在每次绘制它们时都有所不同,并且每次手动选取合适的图形大小都非常不方便(特别是因为我无法准确确定Matplotlib中的大小意味着什么)。那么,有没有一种方法可以让Matplotlib自动计算出该图的大小,因为我的要求是我的所有(64 x 64)图像需要彼此相邻排列? (或者就此而言,彼此相邻的指定距离?)
你能证明此工作时的4个图像是在2×2的网格,而不是单行?我的方法也适用于单行,但不适用于2 x 2网格。 – Ray
@Ray我已经修改了上面的答案 –