【问题标题】:rasterizing matplotlib axis contents (but not frame, labels)光栅化 matplotlib 轴内容(但不是框架、标签)
【发布时间】:2012-12-25 17:43:23
【问题描述】:

对于一篇文章,我正在生成变形的有限元网格图,我使用 matplotlib 的 polycollection 对其进行可视化。图像保存为 pdf。

高密度网格会出现问题,对于这些问题,幼稚的方法会导致文件太大且渲染过于密集而无法实用。

对于这些网格,将每个元素绘制为多边形确实没有意义;它可以很容易地被光栅化,就像将图像保存为 jpg 或 png 一样。但是,对于打印,我想保留清晰的框架、标签和注释。

有谁知道在matplotlib中是否可以实现这种混合光栅化?

我可以想到涉及 imshow 和绕过 polycollection 的解决方案,但我更喜欢使用 matplotlib 的内置组件。

感谢您的建议。

【问题讨论】:

    标签: python matplotlib plot vector-graphics rasterizing


    【解决方案1】:

    只需将 rasterized=True 关键字传递给您的集合构造函数。示例:

    col = collections.PolyCollection(<arguments>, rasterized=True)
    

    这仅允许对该元素进行选择性光栅化(例如,如果您在其上进行正常绘图,则默认情况下将对其进行矢量化)。大多数命令如plotimshow 也可以使用rasterized 关键字。如果想要栅格化整个图形(包括标签和注释),可以这样做:

    fig = plt.figure()
    a = fig.add_subplot(1,1,1, rasterized=True)
    

    (但这不是您想要的,如问题中所述。)

    【讨论】:

    • 哇,这么简单。我现在担心我的谷歌搜索技能。但是非常感谢您的回答,这正是我所希望的!
    • 这太棒了!不过,知道如何控制光栅化的 dpi 吗?似乎忽略了我传递给figuresavefig的dpi...
    • @weronika,如果figuresavefig 中的dpi 不起作用,那么我真的不知道如何更改它。 collections 似乎使用艺术家 allow_rasterization 装饰器,但从快速浏览代码我看不出如何设置 dpi。
    • 我对其进行了更多调查 - 显然有一个针对 dpi 问题的补丁,并且有人正在努力将其纳入 matplotlib - github.com/matplotlib/matplotlib/pull/1185
    • @weronika,很有趣。从那个讨论(适用于 svg 后端)看来,pdf 后端已经支持这一点。但在我的版本中似乎不是这样。
    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多