在matplotlib中栅格化多个元素

pst*_*ohn 8 python matplotlib

使用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()
Run Code Online (Sandbox Code Playgroud)

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

是否可以将所有栅格化元素展平为单个图层,因此pdf大小会大大减少?

谢谢!

HYR*_*YRY 9

将代码更改为:

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

  • 谢谢您的帮助!我不知道在不同的位置设置光栅化会改变结果.我最终使用了一个稍微不同的版本,因为我在我的情节中有其他功能我想保留矢量格式.现在我正在使用所需的效果:`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)` (3认同)