2017-03-11 5 views
0

파이썬에서 plt.fig()을 사용하여 같은 비율로 각 히스토그램을 나란히 놓으려는 시도를하고 있지만 원하는 출력이 나오지 않습니다. 대신 막대 그래프이 이미지 위에 중첩됩니다.어떻게 이미지와 그래프를 나란히 배치 할 수 있습니까?

왜 이런 일이 계속 발생하는지 알고 싶습니다.

import pylab as plt 
import matplotlib.image as mpimg 
import numpy as np 


img = np.uint8(mpimg.imread('motherT.png')) 
im2 = np.uint8(mpimg.imread('waldo.png')) 
# convert to grayscale 
# do for individual channels R, G, B, A for nongrayscale images 

img = np.uint8((0.2126* img[:,:,0]) + \ 
     np.uint8(0.7152 * img[:,:,1]) +\ 
      np.uint8(0.0722 * img[:,:,2])) 

im2 = np.uint8((0.2126* img[:,:,0]) + \ 
     np.uint8(0.7152 * img[:,:,1]) +\ 
      np.uint8(0.0722 * img[:,:,2])) 

# show old and new image 
# show original image 
fig = plt.figure() 

plt.imshow(img) 
plt.title(' image 1') 
plt.set_cmap('gray') 

# show original image 
fig.add_subplot(221) 
plt.title('histogram ') 
plt.hist(img,10) 
plt.show() 

fig = plt.figure() 
plt.imshow(im2) 
plt.title(' image 2') 
plt.set_cmap('gray') 

fig.add_subplot(221) 
plt.title('histogram') 
plt.hist(im2,10) 

plt.show() 
+0

아마도이 도움이 : [이 위치 줄거리에 노력 옆에 서로]] (http://stackoverflow.com/questions/1616427/trying-to-position-subplots-next-to-each-other) –

답변

2

두 이미지에 대해 이렇게하는 것처럼 보입니까? 서브 플로트가 최선의 방법입니다.

import pylab as plt 
import matplotlib.image as mpimg 
import numpy as np 


img = np.uint8(mpimg.imread('motherT.png')) 
im2 = np.uint8(mpimg.imread('waldo.png')) 

# convert to grayscale 
# do for individual channels R, G, B, A for nongrayscale images 

img = np.uint8((0.2126 * img[:,:,0]) + np.uint8(0.7152 * img[:,:,1]) + np.uint8(0.0722 * img[:,:,2])) 
im2 = np.uint8((0.2126 * im2[:,:,0]) + np.uint8(0.7152 * im2[:,:,1]) + np.uint8(0.0722 * im2[:,:,2])) 

# show old and new image 
# show original image 
fig = plt.figure() 

# show original image 
fig.add_subplot(221) 
plt.title(' image 1') 
plt.set_cmap('gray') 
plt.imshow(img) 

fig.add_subplot(222) 
plt.title('histogram ') 
plt.hist(img,10) 

fig.add_subplot(223) 
plt.title(' image 2') 
plt.set_cmap('gray') 
plt.imshow(im2) 

fig.add_subplot(224) 
plt.title('histogram') 
plt.hist(im2,10) 

plt.show() 

이 당신에게 뭔가를 줄 것이다 : 다음은 당신이 2 x 2 효과를 사용하는 방법을 보여줍니다

matplotlib screenshot of 2x2 usage

또한, 원래 코드에서 im2에 대한 그레이 스케일 계산주의 img에 대한 이미지 데이터를 사용하지 않고 im2입니다.

당신은 당신이 당신에게주는 각 plt.imshow() 전에 plt.axis('off')을 추가 할 수 있습니다 이렇게하려면 이미지의 각 떨어져 축을 회전 할 수 있습니다 :

without axis

+0

답변을 주셔서 감사합니다 마틴 에반스, 그것은 잘 작동합니다. 내 질문은 이미지와 히스토그램 크기가 커지도록 서브 플로트를 조정하는 방법이 있습니까? ** add_subplot ** 값을 변경했는데 이미지와 히스토그램에 약간의 이상한 변화가있었습니다 (히스토그램이 반전되고 이미지가 똑같이 나타나고 그 반대의 경우도 있음). –

+1

전체 그림의 크기를 나타내는 경우 다음과 같이 변경하십시오 : fig = plt.figure (figsize = (25, 20))' –

+0

놀라운! 감사. –