2012-05-21 81 views
3

matplotlib中,我使用LineCollection來繪製和着色給定縣的邊界的國家。當我將這個數字保存爲pdf文件時:在matplotlib中減小pdf圖形文件的大小

fig.savefig('filename.pdf',dpi=300) 

數字大小相當大。然而,保存爲png文件:

fig.savefig('filename.png',dpi=300) 

,然後使用Linux命令convert的文件很小它們轉換爲PDF格式。我試圖減少dpi,但不會改變PDF文件的大小。有沒有一種方法可以將數字直接保存爲matplotlib中的較小pdf文件?

+0

我發現這個博客文章有幫助:http://www.astrobetter.com/blog/2014/01/17/slim-down-your-bloated-graphics/ –

回答

8

PDF較大,因爲它包含了所有的矢量信息。通過保存PNG,您可以生成光柵化圖像。看來,在你的情況,你可以通過直接光柵化的情節產生較小的PDF:

plt.plot(x, y, 'r-', rasterized=True) 

這裏,x, y有一些情節座標。您基本上必須使用additional關鍵字參數raterized來實現該效果。

+1

謝謝。我嘗試使用lines = LineCollection(...),lines.set_rasterized(True)。儘管這大大減少了數字的大小(從3mb開始800kb),但是仍然比png轉換文件(400kb)大。 – imsc

+0

當您創建圖形時,您是否嘗試將圖形的dpi設置爲較低的值,即'fig = plt.figure(dpi = 100)' –

+0

是的。這兩個PDF文件(直接保存以及從PNG轉換)都保存爲dpi = 300。如果我使用dpi = 100,則數字大小會減小,但質量會比png低。 – imsc

0

我認爲使用「柵格化=真」有效地保存圖像類似於PNG格式。放大時,會看到模糊像素。

如果你想要數字是高質量的,我的建議是從數據中抽樣並繪製一張圖。 pdf文件的大小大致是它需要記住的數據點的數量。