2014-04-02 2 views
3

페이지 한도에 맞추기 위해 넓고 짧아야하는 과학 논문 용 플롯을 준비 중입니다. 그러나 pdf로 저장하면 x 축 레이블이 없어집니다. 경계 상자 바깥에 있기 때문입니다.Matplotlib에서 축 레이블을 클리핑하지 못하도록 방지하는 방법은 무엇입니까?

다음을 iPython 노트북에 넣으면 문제가 재현됩니다.

%pylab inline 
pylab.rcParams['figure.figsize'] = (8.0, 2.0) 
plot([1,5,2,4,6,2,1]) 
xlabel("$x$") 
ylabel("$y$") 
savefig("test.pdf") 

결과 PDF 파일

은 다음과 같습니다 enter image description here

어떻게 PDF 파일의 경계 상자를 변경할 수 있습니까? 이상적으로는 "적절하게 수행"하는 솔루션을 원합니다. 즉, 불필요한 공간을 왼쪽과 오른쪽으로 제거하는 것을 포함하여 모든 것이 잘 맞도록 크기를 자동으로 조정합니다.하지만 서둘러야합니다. 경계 상자를 변경하는 방법은 무엇이든 해결해야하며, 필요한 경우 제대로 될 때까지 숫자를 추측합니다.

답변

4

plt.tight_layout()을 사용하면 matplotlib에서 플롯의 레이아웃을 조정할 수 있습니다. tight_layout()은 자동으로 크기를 조정하며 라벨/틱/등이 겹치는 경우에도 사용할 수 있습니다. 여기

%pylab inline 

pylab.rcParams['figure.figsize'] = (8.0, 2.0) 

plot([1,5,2,4,6,2,1]) 

xlabel("$x$") 
ylabel("$y$") 

tight_layout() 

savefig("test.pdf") 

출력의 .PNG입니다 (PDF 파일에 SO를 업로드 할 수 없습니다하지만 난 그것을 확인했습니다 그리고 그것은 PDF에 대해 동일한 방식으로 작동합니다).

Example plot

+0

나는 이것을 받아 들일 것이지만, 장래의 모든 방문객은 내 자신의 대답에 관심이있을 수도있다. 내 대답은 바운딩 박스를 플롯에 맞게 조정하는 것이다. – Nathaniel

6

는 인터넷 검색의 자리 후, 나는 대답을 발견 : 당신이 savefig 명령에 bbox_inches='tight'을 줄 수 있으며, 자동으로 내용의 크기에 경계 상자를 조정합니다 :

%pylab inline 
pylab.rcParams['figure.figsize'] = (8.0, 2.0) 
plot([1,5,2,4,6,2,1]) 
xlabel("$x$") 
ylabel("$y$") 
savefig("test.pdf",bbox_inches='tight') 

enter image description here

이들은 약간의 인치입니다.

경계 상자를 테두리 상자에 맞게 변경하지 않고 경계 상자를 그림으로 조정하기 때문에 이는 Ffisegydd의 대답과 약간 다릅니다. (그러나 모두 내 목적을 위해 잘 있습니다.)

당신이 과학 논문의 플롯을 준비하는 경우
4

, 내가 생성 한 후

plt.subplots_adjust(left,right,bottom,top,..) 

를 사용하여, 직접 을 '클리핑'을 수행하는 것이 좋습니다 그림을 저장하고 저장하십시오. ipython 콘솔에서 실행중인 경우 그림 생성 후 subplots_adjust을 호출하고 시행 착오를 통해 여백을 조정할 수 있습니다. 일부 백엔드 (적어도 Qt 백엔드라고 생각합니다)는이 기능에 대한 GUI를 제공합니다.

이 작업을 수행하는 데는 시간이 걸리지 만 대부분의 시간은 특히 내 경험에 비추어 볼 때 라텍스 렌더링의 경우보다 정확한 결과를 제공합니다.

이것은 당신이 tight_layout이 두 그림에서 같은 마진을 보장하지 않으므로, (예를 들어 subfigure 같은 패키지) 수직 또는 수평으로 두 그림을 스택 할 때마다 유일한 방법이며, 축이의 잘못 정렬됩니다 종이.

예를 들어 그림 너비를 저널 열 너비와 일치시키는 방법을 다루는 게시 용 matplotlib 사용에 대해서는 link입니다.

+0

감사합니다. 그 링크는 매우 유용합니다. – Nathaniel

관련 문제