2017-05-18 4 views
1

축 배열의 PDF를 만듭니다. 때로는 페이지가 가득 차 있지는 않습니다. 즉 모든 축에 데이터가있는 것은 아닙니다. 이 경우 사용되지 않는 축을 PDF에 표시하지 않기를 원합니다. 하지만 레이아웃을 사용하는 것과 같게하고 싶습니다. 나는 겹치지 않는 축과 ylabel을 얻기 위해 tight_layout()을 사용하고 있습니다.축 배열이 불완전한 matplotlib에서 tight_layout()을 사용합니다.

다음 코드는 먼저 축이 사용 된 경우 사용되지 않는 것들 (tight_layout이 제대로 작동하지 않음)을 삭제 한 다음 어떻게하면 표시되지 않도록 설정했는지를 보여줍니다. tight_layout ()이 (가)

AttributeError: 'NoneType' object has no attribute 'is_bbox'

오류로 실패합니다.

import numpy as np 
import matplotlib.pyplot as plt 
def prep_figure(): 
    plt.close('all') 
    fig, axs = plt.subplots(4,3, figsize=(11,8.5)) 
    axs=np.concatenate(axs) 
    for ii in range(5): 
     axs[ii].plot([1,2,3],[-10,-1,-10]) 
     axs[ii].set_ylabel('ylabel') 
     axs[ii].set_xlabel('xlabel') 
    return fig,axs 

fig,axs=prep_figure() 
plt.tight_layout() 
plt.show() 
plt.savefig('tmp.pdf',) 

# Try deleting extra axes 
fig,axs=prep_figure() 
for ii in range(5,12): 
    fig.delaxes(axs[ii]) 
plt.tight_layout() 
plt.show() 
plt.savefig('tmpd.pdf',) 

# Try hiding extra axes 
fig,axs=prep_figure() 
for ii in range(5,12): 
    axs[ii].set_visible(False) 
plt.tight_layout() 
plt.show() 
plt.savefig('tmph.pdf',) 

첫 번째 버전의 레이아웃을 원하지만 여분의 축이 보이지 않습니다.

답변

0

그림과 독립적으로 축을 만들 수 있습니다. 축에 대한 더 많은 제어권을 가지고 있기 때문에이 방법을 추천합니다. 예를 들어 모양이 다른 축을 가질 수 있습니다.

코드 :

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure() 
for ii in range(5): 
    ax = fig.add_subplot(4,3,ii+1) 
    ax.scatter(np.random.random(5),np.random.random(5)) 
    ax.set_xlabel('xlabel') 
    ax.set_ylabel('ylabel') 
fig.tight_layout() 
fig.show() 

결과 : enter image description here

0

는 (실행 된 첫 번째 경우의 코드없이) 단독으로 사용하는 경우 축을 삭제의 두 번째 경우는 잘 작동하고 그림 경우 먼저 저장되고 도시

fig,axs=prep_figure() 
for ii in range(5,12): 
    fig.delaxes(axs[ii]) 
plt.tight_layout() 
plt.savefig('tmpd.pdf',) 
plt.show() 

다시 도면을 저장하면 세 번째 경우가, 대신 그것이 보이지 제조를 표시하기 전에 잘 작동 ax.axis("off")을 통해 축을 끕니다.

fig,axs=prep_figure() 
for ii in range(5,12): 
    axs[ii].axis("off") 
plt.tight_layout() 
plt.savefig('tmph.pdf',) 
plt.show() 

생성 된 PDF는 두 경우 모두 동일하다 :

enter image description here

관련 문제