【问题标题】:Rasterizing multiple elements in matplotlib光栅化 matplotlib 中的多个元素
【发布时间】:2012-08-23 18:59:36
【问题描述】:

在使用 pdf 输出的 rasterized=True 关键字对绘图中的多行进行光栅化时遇到问题。 一些版本信息:

  • matplotlib 版本 1.1.1rc
  • ubuntu 12.04
  • python 2.7.3

这是一个演示我的问题的基本示例:

# Import matplotlib to create a pdf document
import matplotlib
matplotlib.use('Agg')
from matplotlib.backends.backend_pdf import PdfPages
pdf = PdfPages('rasterized_test.pdf')

import matplotlib.pylab as plt

# some test data
import numpy as np
ts = np.linspace(0,2*np.pi,100) * np.ones((200,100)) 
ts += (np.linspace(0, np.pi, 200)[np.newaxis] * np.ones((100,200))).T
ys = np.sin(ts)

fig = plt.figure() 
ax = fig.add_subplot(111)
ax.plot(ts[0], ys.T, color='r', lw=0.5, alpha=0.5, rasterized=True)
pdf.savefig()

pdf.close()

基本上,我有很多(在这种情况下为 200 条)紧密重叠的线,这使得生成的图形(未光栅化)过于难以加载。我想光栅化这些线,这样轴标签(和绘图的其他元素,未显示)保持矢量,而解决方案轨迹被展平为单个光栅背景。但是,使用上面的代码,图像仍然需要很长时间才能加载,因为每个轨迹都是独立光栅化的,从而产生了多个图层。 (如果我用像inkscape这样的程序打开生成的pdf,我可以独立地操纵每个轨迹。)

是否可以将所有光栅化的元素扁平化为一层,从而大大减小 pdf 的大小?

谢谢!

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    将代码改为:

    ax = fig.add_subplot(111, rasterized=True)
    ax.plot(ts[0], ys.T, color='r', lw=0.5, alpha=0.5)
    

    【讨论】:

    • 感谢您的帮助!我不知道在不同的位置设置光栅化会改变结果。我最终使用了一个稍微不同的版本,因为我想在我的情节中以矢量格式保留其他功能。现在我正在使用所需的效果:ax = fig.add_subplot(111);ax.set_rasterization_zorder(1);ax.plot(ts[0], ys.T, color='r', lw=0.5, alpha=0.5, zorder=0)
    • 仅供参考:set_rasterization_zorder(z) 表示z 以下 zorder 的所有艺术家都将被光栅化。
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 2014-02-15
    • 2018-03-31
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多