2014-04-02 34 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

谷歌搜索的點之後,我找到了答案:你可以給bbox_inches='tight'savefig命令,它會自動調整邊界框的內容的大小:

%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。

手動操作需要時間,但大多數時間都會提供更精確的結果,尤其是在使用乳膠渲染的情況下。

這是每當你要堆疊垂直或水平兩個數字(與封裝等subfigure例如),作爲tight_layout將不能保證在這兩個圖中相同的邊緣的唯一選擇,並且軸將導致未對準紙。

這是一個很好的link上使用matplotlib出版物,例如如何設置數字寬度以匹配日記列的寬度。

+0

謝謝,該鏈接非常有幫助。 – Nathaniel