我有一些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我已經修改了上面的答案 –