MATLAB和高质量的EPS数字

时间:2011-11-26 19:25:51

标签: matlab

我希望将我的MATLAB图输出为高质量图。具体来说,我想将其保存为基于矢量的文件格式,如EPS或SVG。

I have tried print and saveas commands:
saveas(h,'myFileName','epsc2');
print('-r150','-depsc2', 'myFilename');

在所有情况下,虽然轴标签确实是矢量,但这会产生质量较差的图形部分。为什么MatLab在将它放入EPS之前会做一些可怕的渲染?

此处质量差的示例: http://users.ox.ac.uk/~pemb2372/myFileName.eps

修改 值得注意的是,如果您使用Mac查看来自Matlab的EPS文件,“预览”应用可能会使内部图形内容光栅化并且质量较差,同时使轴和标签保持矢量化和高质量。这是非常误导的,但是当您在例如Inkscape中打开所述EPS文件时,质量实际上是矢量且非常高。

编辑2: 我的大学托管帐户已过期,因此您无法再查看该图。我只想说它在优质美丽的轴线,刻度线和标签内显示出质量较差的光栅样式。

4 个答案:

答案 0 :(得分:12)

我以为我会分享我的问题,以及我如何克服它......

我得到了可怕的结果,因为我将错误的渲染器设置为默认值。在我的startup.m中,我启用了zbuffer渲染器。这是一个示例eps输出。

Crop of output eps

我用print(gcf,'-depsc2','filename.eps')制作了eps输出。这个eps是如此明显的光栅化。这让我对matlab很生气。然后,我有一个脑波 - 也许我的默认渲染器zbuffer正在干扰图像保存过程。所以,添加一行:

set(gcf,'renderer','painters')

并像以前一样运行print命令,这是输出:

Crop of second output eps

请注意,我只是将eps输出文件的屏幕截图设为100%。我可以确认第二张图像实际上是矢量。关于在MATLAB中选择Renderers,这是一个很好的问题/解释。

答案 1 :(得分:11)

MATLAB文件交换中的export_fig函数是在MATLAB中将数字准确导出为eps和pdf(以及位图格式)的一种相当可靠的方法。

同样来自文件交换的plot2svg函数允许您以svg格式导出。它提供了一些额外的好处,例如能够以矢量格式导出半透明补丁对象。

blog post中提供了导出方法的比较。

答案 2 :(得分:10)

Matlab可以以高于EPS的质量输出到pdf,但有自己的注意事项,即设置合适的边距和字体大小。

修改: 示例类似于EPS情况,如在例如帮助下所解释的那样。 print

saveas(gcf,'filename.pdf')

print('-dpdf','filename.pdf')

您可能还想查看图中的PaperSizePaperPositionPaperUnits属性(通过setget函数)。

编辑:另一种选择是使用FileExchange上提供的功能之一,例如下面@ user664303提到的功能。我最喜欢与LaTeX一起使用的是matlab2tikz,其最新版本可以从GitHub获得。与TikZ的external库一起,我认为这提供了一些最好的图表。 也许最好提一下,自2012年以来我一直积极参与matlab2tikz项目。

答案 3 :(得分:0)

我总是通过matplotlib的{​​{1}}库获取最终的图(那些应该插入到论文和出版物中)。

您可以投注生成的图表的惊人质量,包括python.pdf格式。