【问题标题】:Reducing the size of pdf figure file in matplotlib减少matplotlib中pdf图形文件的大小
【发布时间】:2023-04-01 06:22:01
【问题描述】:

matplotlib 中,我使用LineCollection 来绘制国家并为其着色,这些国家的边界​​已给出。当我将图形保存为 pdf 文件时:

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

图的尺寸很大。但是,将它们保存为 png 文件:

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

然后使用 linux convert 命令将它们转换为 pdf,文件很小。我尝试降低 dpi,但是不会改变 pdf 文件的大小。有没有办法可以将这些数字直接保存为 matplotlib 中的较小的 pdf 文件?

【问题讨论】:

标签: dpi matplotlib figure


【解决方案1】:

PDF 更大,因为它包含所有矢量信息。通过保存 PNG,您可以生成光栅化图像。在您的情况下,您似乎可以通过直接栅格化绘图来生成更小的 PDF:

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

这里,x, y 是一些绘图坐标。你基本上必须使用额外的关键字参数raterized来达到效果。

【讨论】:

  • 谢谢。我尝试使用lines = LineCollection(...),lines.set_rasterized(True)。尽管这大大减少了图形大小(从 3mb 变为 800kb),但仍然比 png 转换后的文件(400kb)更大。
  • 你有没有试过在创建的时候把图的dpi设置为较低的值,即fig = plt.figure(dpi=100)
  • 是的。 pdf 文件(直接保存以及从 png 转换而来)都以 dpi=300 保存。如果我使用 dpi=100,图形尺寸会减小,但质量会比 png 低。
  • 您能否提供一个工作示例,以便我们可以使用这些设置?是否有其他艺术家可以从光栅化中获利?
  • 有点困难,因为我使用的数据文件很大。如果曲线足够平滑,则光栅化后的 png 和 pdf 文件大小相同。但是我想,就我而言,曲线是海岸线(之字形数据),pdf和png的大小不同。你的答案非常接近我想要的。再次感谢。
【解决方案2】:

我认为使用“rasterized = True”可以有效地保存图像,类似于 png 格式。放大时,您会看到模糊的像素。

如果您希望数据质量高,我的建议是从数据中抽样并绘制图表。 pdf 文件大小大致是它需要记住的数据点的数量。

【讨论】:

    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多