我希望将我的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: 我的大学托管帐户已过期,因此您无法再查看该图。我只想说它在优质美丽的轴线,刻度线和标签内显示出质量较差的光栅样式。
答案 0 :(得分:12)
我以为我会分享我的问题,以及我如何克服它......
我得到了可怕的结果,因为我将错误的渲染器设置为默认值。在我的startup.m
中,我启用了zbuffer
渲染器。这是一个示例eps输出。
我用print(gcf,'-depsc2','filename.eps')
制作了eps输出。这个eps是如此明显的光栅化。这让我对matlab很生气。然后,我有一个脑波 - 也许我的默认渲染器zbuffer
正在干扰图像保存过程。所以,添加一行:
set(gcf,'renderer','painters')
并像以前一样运行print命令,这是输出:
请注意,我只是将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')
您可能还想查看图中的PaperSize
,PaperPosition
和PaperUnits
属性(通过set
和get
函数)。
编辑:另一种选择是使用FileExchange上提供的功能之一,例如下面@ user664303提到的功能。我最喜欢与LaTeX一起使用的是matlab2tikz
,其最新版本可以从GitHub获得。与TikZ的external
库一起,我认为这提供了一些最好的图表。
也许最好提一下,自2012年以来我一直积极参与matlab2tikz
项目。
答案 3 :(得分:0)
我总是通过matplotlib
的{{1}}库获取最终的图(那些应该插入到论文和出版物中)。
您可以投注生成的图表的惊人质量,包括python
和.pdf
格式。