2016-06-22 7 views
2

동일한 모양 (예 : (64, 64, 3))의 이미지 배열이 있습니다. 내가 pyplot.subplot()을 사용하여 그리드에 그려보고 싶지만, 내가 할 때 pyplot.subplots_adjust(hspace=0, wspace=0)을 사용할 때도 이미지 사이에 원하지 않는 간격이 생깁니다. 다음은 코드 예제입니다.matplotlib pyplot 이미지 간 간격을 좁히십시오.

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() 

다음은 출력물입니다.

enter image description here

당신이 볼 수 있듯이, 이러한 이미지 사이에 원치 않는 수직 공간이있다. 이 문제를 우회하는 한 가지 방법은 Jupyter Notebook에서 matplotlib.rcParams['figure.figsize'] = (_, _)과 같이 숫자에 맞는 크기를 조심스럽게 손으로 선택하는 것입니다. 그러나, 보통 내가 구상하기를 원하는 이미지의 수는 내가 플로팅 할 때마다 다르며 매번 올바른 크기를 손으로 따는 것은 매우 불편합니다 (특히 Matplotlib의 크기가 정확히 무엇인지 의미 할 수 없기 때문에). 그래서 Matplotlib이 모든 크기 (64 x 64)가 서로 나란히 있어야한다는 필자의 요구에 따라 Matplotlib이 자동으로 크기를 계산할 수있는 방법이 있습니까? (또는 그 거리에 서로 지정된 거리가 있습니까?)

답변

3

먼저 하위 플롯을 만든 다음 플롯합니다. 나는 단순 위해 여기에 한 줄에 그것을했다

images = create_dummy_images() 
fig, axs = pyplot.subplots(nrows=1, ncols=4, gridspec_kw={'wspace':0, 'hspace':0}, squeeze=True) 
for i, image in enumerate(images): 
    axs[i].axis("off") 
    axs[i].imshow(image) 

enter image description here

UPDATE : 신경 끄시 고, 문제가 아닌 부가 적 줄거리의 정의가 있지만, 후 축을에게 을 왜곡 imshow()로했다 당신 올바르게 설정 했어. 해결 방법은 imshow()에 대한 호출에서 aspect='auto'을 사용하여 그림을 변경하지 않고 축을 채 웁니다. 당신이 광장 축을 가지고 싶다면, 당신은 적절한 너비/높이 비율로 사진을 만들 필요가

pyplot.figure(figsize=(5,5)) 
images = create_dummy_images() 
for i, image in enumerate(images): 
    pyplot.subplot(2, 2, i + 1) 
    pyplot.axis("off") 
    pyplot.imshow(image, aspect='auto') 
pyplot.subplots_adjust(hspace=0, wspace=0) 
pyplot.show() 

enter image description here

+0

당신이 4 개 이미지는 2 × 2 그리드에있을 때이 작품을 입증 할 수, 단일 행에 반대하는 것처럼? 내 방법은 단일 행에서도 작동하지만 2 x 2 그리드에서는 작동하지 않습니다. – Ray

+0

@ 레이 위의 내 대답을 수정했습니다. –