在MATLAB中将“大量”图形保存为PDF-渲染问题

yuk*_*yuk 5 pdf matlab rendering save

我在MATLAB中生成了一个包含大量元素(100000+)的图形,并希望将其保存到PDF文件中。使用zbuffer或painters渲染器,我得到了一个非常大且缓慢打开的文件(超过4 Mb)-所有点均为矢量格式。使用OpenGL渲染器将PDF中的图形光栅化,可以使用该图,但对于文本标签则不好。文件大小约为150 Kb。

尝试使用以下简化代码,例如:

x=linspace(1,10,100000);
y=sin(x)+randn(size(x));
plot(x,y,'.')
set(gcf,'Renderer','zbuffer')
print -dpdf -r300 testpdf_zb
set(gcf,'Renderer','painters')
print -dpdf -r300 testpdf_pa
set(gcf,'Renderer','opengl')
print -dpdf -r300 testpdf_op
Run Code Online (Sandbox Code Playgroud)

带有多个轴和不同类型的图的实际图形要复杂得多。

有什么方法可以栅格化图形,但将文本标签保留为矢量?

OpenGL的另一个问题是在Mac OSX的终端模式(-nosplash -nodesktop -nodisplay)下不起作用。看起来不支持OpenGL。我必须使用终端模式进行自动化。我运行的MATLAB版本是2007b。Mac OSX服务器10.4。

AVB*_*AVB 2

这是一个有趣的事情。你的问题不是Matlab,而是Ghostscript(Matlab通过调用Ghostscript创建PDF,至少在Windows上)。当我跑步时

x=linspace(1,10,100000);
y=sin(x)+randn(size(x));
plot(x,y,'.')
print -dpsc2 test.ps
Run Code Online (Sandbox Code Playgroud)

我有一个 2Mb PS 文件(当然都是矢量),压缩后变成了 164Kb ZIP。人们期望在将 PS 转换为 PDF 时获得或多或少相同的结果,但ps2pdf test.ps生成了 4Mb 文件!

由于您使用的是 Mac,因此您可能拥有 Distiller。我会尝试一下 - 如上所述生成 PS 文件,然后通过 Distiller 运行它们;你应该得到一个 150K 的矢量 PDF。

如果您坚持光栅化,我可以建议将没有任何轴或标签的图形打印到 tiff,打开 tiff,然后在其顶部重新创建轴和标签。