2014-06-16 3 views
3

나는 subplot2grid를 사용하여 서로 다른 행과 열로 이루어진 여러 개의 서브 플로트로 matplotlib에서 하나의 그림을 만들려고합니다. 예를 들어tight_layout이 실패 할 때 수평 서브 플롯 간격을 줄이는 방법은 무엇입니까?

, 다음 코드를이 같은 도면하게

import matplotlib.pyplot as plt 
import numpy as n 

fig = plt.figure() 
ax1 = plt.subplot2grid((2, 5), (0, 0), rowspan=2, colspan=2) 
ax2 = plt.subplot2grid((2, 5), (0, 2)) 
ax2_2 = plt.subplot2grid((2, 5), (0, 3)) 
ax2_3 = plt.subplot2grid((2, 5), (0, 4)) 
ax3 = plt.subplot2grid((2, 5), (1, 2), colspan=3) #, sharex=ax2) 

xs = n.linspace(0, 2*n.pi, 100) 
ax1.plot(xs, n.sin(xs)) 
ax2.plot(xs, n.cos(xs)) 
ax2_2.plot(xs, n.tan(xs)) 
ax2_3.plot(xs, n.sin(xs)) 
ax3.plot(xs, n.cos(xs)) 


ax2.set_xticklabels([]) 
ax2.set_yticklabels([]) 
ax2_2.set_xticklabels([]) 
ax2_2.set_yticklabels([]) 
ax2_3.set_xticklabels([]) 
ax2_3.set_yticklabels([]) 

# This comes from a separate attempt to make the ticks invisible, but seems to make no change. 
plt.setp(ax2.get_xticklabels(), visible=False) 
plt.setp(ax2.get_yticklabels(), visible=False) 
plt.setp(ax2_2.get_xticklabels(), visible=False) 
plt.setp(ax2_2.get_yticklabels(), visible=False) 
plt.setp(ax2_3.get_xticklabels(), visible=False) 
plt.setp(ax2_3.get_yticklabels(), visible=False) 


fig.set_size_inches(6.5, 2.85) 
fig.tight_layout() 
# I tried several things here - subplots_adjust improves the vertical spacing a little, but not the horizontal. 
fig.subplots_adjust(hspace=0.1) 

fig.savefig('test.png', dpi=100) 

:

enter image description here

문제는 각각의 우측 상단에있는 3 단세포 줄거리 인 는 너비의 약 70 % 만 맞습니다. 그렇지 않으면 tight_layout이 공간을 멋지게 처리하지만,이 공간이 채워지지 않은 이유 또는 해결 방법을 찾을 수 없습니다.

그래서 ... 누구든지이 방법을 알고 서브 플로트의 전체 너비를 사용할 수 있습니까?

답변

5

수직 공간을 조정합니다 subplots_adjust()hspace 매개 변수 및 wspace 매개 변수 수평 공간을 사용, 그래서 아마도 당신이 필요로하는 무엇을 다음 줄거리에 영향을하지만, 그들 모두의 간격을 조정

fig.subplots_adjust(wspace=0.1) 
+0

오른쪽 상단에있는 3 개의 플롯은 올바르지 만 왼쪽과 오른쪽 사이의 축 레이블과 눈금 레이블은 이제 겹칩니다. 그것은 방향을 시도하는 좋은 단서를 준다. 그래서 고마워! – inclement

+0

@ 중복이 중복을 피하려면 다음을 늘릴 수 있습니다 :'ax1.yaxis.labelpad' –