2012-05-21 141 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文件的大小大致是它需要记住的数据点的数量。