用MATLAB生成达到出版质量的图形

  [复制链接]
stellari 发表于 2013-5-28 15:52:34
本帖最后由 stellari 于 2013-5-28 16:03 编辑

MATLAB的绘图功能非常强大,但是有两个突出的问题:1、导出的图片质量不高;2、有时导出图片和figure中实际所见并不一致。所以导致大家正式发表专业文章时不经常用MATLAB作为首选的绘图软件。其实,只要解决了上面的两个问题,MATLAB也是可以生成能够达到出版水平的图形的。

简介

export_fig (见附件) 就是一个能够解决上述问题的工具包。首先,问题1的主要原因是MATLAB的默认绘图渲染器较为原始,所以画出的线条都有很明显的锯齿。而用export_fig导出的图片,所有的线条和文字都是经过抗锯齿处理的,所以视觉效果极佳;至于问题2,export_fig会严格按照figure上显示的内容去导出,是真正意义上的所见即所得。而且用export_fig导出的图片不会有MATLAB默认导出时那么大的白边,而是保证白边的范围仅能容纳坐标轴和title,xlabel,ylabel,这样使得图片的尺寸减小,排版更方便。下两图选得虽然不是很有代表性,但是依然可以看出export_fig截出的图中白边大量减少,并且有非常先进的抗锯齿处理(比如,上图的红线在1-2范围内有很明显的锯齿,下图则几乎没有。坐标轴上的数字也是如此)。背景中的网格也由虚线变成了“淡实线”,更符合现代制图的审美观。

figure中直接选择save的结果:


export_fig的结果:


使用方法

export_fig的使用方法很简单,解压附件中的文件,然后将得到的所有文件放入某目录中,再将该目录添加至MATLAB的搜索路径中。导出图片时,输入

export 文件名

即可将当前figure中的图输出至文件中。export_fig能够自动识别文件名的扩展名,并保存成相应的格式。

注意

如果需要导出pdf或eps格式的话,需要下载并安装ghostscript,具体可以参见export_fig的发布页

http://www.mathworks.com/matlabc ... nge/23629-exportfig


题外话

其实不要小看MATLAB。MATLAB其实隐藏了一个非常强大的绘图模式: HG2。这个模式平时是隐藏的,只能在MATLAB启动时通过附加参数的形式开启,即可以将MATLAB的快捷方式中的指向目标由
"...\...\MATLAB\R2013a\bin\MATLAB.exe"
改为
"...\...\MATLAB\R2013a\bin\MATLAB.exe" -hgVersion 2
(注意hgVersion 和 2 之间有一个空格)
然后使用这个快捷方式打开MATLAB。在界面上没有任何区别,但是当你画出图之后,你会发现一切都不同了。
(下二图转载自undocumentedmatlab.com,左图为普通模式,右图为HG2模式)

版本在2010以上,感兴趣的同学不妨一试(版本更早其实也可以尝试)。当然目前HG2模式尚不稳定,所以并没有向一般用户公开。不过这很可能是下一代MATLAB的发展方向,说不定R2014a的默认绘图模式就是HG2!

总结

目前公认最好的图片导出方案还是export_fig。这个工具包在MATLAB Central上一直下载量排行第一。这个工具包可以完全替代MATLAB自己的图片导出功能,强烈推荐大家使用。我本人现在正在写的一篇文章就全部使用export_fig,而没有使用其他任何的绘图软件。
HG2模式应该是MATLAB的未来发展方向,大家可以先尝个鲜。很有可能在不久的将来就能够在MATLAB中直接生成这种高质量的图像了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

197 条回复


chybeyond 发表于 2013-5-28 17:23:13
不错,学习了。。。

竹中籽 发表于 2013-6-8 00:24:01
很好,很强大哈! 找了很久;学习了!:)

jsxhzhaohu 发表于 2013-6-8 10:15:36
学习一下,加油

guoxm-2004 发表于 2013-6-8 15:24:57
学习了,真是不错。

guoxm-2004 发表于 2013-6-8 15:36:15
试了一下HG2模式。打印出的图很清晰光滑,唯一有一点遗憾就是有灰色的边。不如HG1 模式下的图,完全没有额外修饰,就是曲线和网格。不知道是否能通过设置参数来改变。

mayoya 发表于 2013-6-8 16:01:14
提示: 作者被禁止或删除 内容自动屏蔽

doogoofeng 发表于 2013-6-11 16:48:26
网上一直找这个函数的教程,作者的网页又打不开,原来这里别有洞天啊

e111r222 发表于 2013-6-11 17:35:55
不错,标记一下

pxxzzz 发表于 2013-6-27 13:43:56
好资源 <:handshake:>

smartgirl 发表于 2013-6-27 20:40:01
不错!谢谢分享

winner245 发表于 2013-6-27 21:48:56
非常实用!

winner245 发表于 2013-7-2 21:22:33
guoxm-2004 发表于 2013-6-8 15:36
试了一下HG2模式。打印出的图很清晰光滑,唯一有一点遗憾就是有灰色的边。不如HG1 模式下的图,完全没有额 ...

那你试试在打印前先加上一句: set(gcf, 'Color', 'w');

spawnlxb2011 发表于 2013-7-2 22:07:02
很好,很强大哈! 找了很久;

winner245 发表于 2013-7-3 00:21:22
多谢版主分享!确实很好用。下载了附件中的export_fig本体,其中输出图形命令应该是 export_fig 文件名 ,版主是否自行修改过附件中的程序,变成了 export 文件名 ?

另外,我有两个小疑问,请版主赐教:

1. 在export_fig发布页要求安装ghostscript才可以支持pdf、eps输出,输出eps图形还需要额外安装pdftops。我安装了ghostscript,已经可以正常输出pdf了,但是下载了pdftops,里面并没有安装文件,我该如何安装或设置pdftops方可正确输出eps?目前我只能先用export_fig输出pdf,然后另存为eps。

2. export_fig输出图形的坐标轴有灰色背景,如何去掉灰色背景?

winner245 发表于 2013-7-3 03:08:38
第1个问题已经解决了,就是用export_fig name.eps 命令时,会自动弹出对话框说找不到 pdftops,这时手动选择pdftops所在的文件夹即可。

第2个问题还不知道怎么解决,用export_fig生成的图形在图形外围四周的边框有灰色背景,而用matlab 直接save的图形是没有灰色背景的,所以,想请教版主,如何解决灰色背景问题

stellari 发表于 2013-7-3 03:36:38
winner245 发表于 2013-7-3 03:08
第1个问题已经解决了,就是用export_fig name.eps 命令时,会自动弹出对话框说找不到 pdftops,这时手动选 ...

这不就是你之前提到过的
set(gcf, 'Color', 'w');
么?MATLAB的导出功能会自动做这一步(save的时候,你会注意到背景会变白一下然后再恢复),但export_fig不会。所以需要自己手动完成。

winner245 发表于 2013-7-3 04:34:28
stellari 发表于 2013-7-3 03:36
这不就是你之前提到过的
set(gcf, 'Color', 'w');
么?MATLAB的导出功能会自动做这一步(save的时候,你 ...

是呀,我也注意到了,matlab save的时候背景会变白一下,但是我用set(gcf, 'Color', 'w')后再export_fig还是不行,还是有灰色背景

winner245 发表于 2013-7-3 05:01:04
stellari 发表于 2013-7-3 03:36
这不就是你之前提到过的
set(gcf, 'Color', 'w');
么?MATLAB的导出功能会自动做这一步(save的时候,你 ...

奇怪了,用命令 set(gcf, 'Color', 'w'); 不行,但是直接选中图形四周的边框然后右键选color,再选白色,最后用export_fig 就可以输出没有灰色背景边框的eps了

guoxm-2004 发表于 2013-7-3 08:03:05
winner245 发表于 2013-7-2 21:22
那你试试在打印前先加上一句: set(gcf, 'Color', 'w');

谢谢。学习了。

信晓馸 发表于 2013-7-3 11:44:27
这个很好

zgrabbit504 发表于 2013-7-3 14:09:22
感谢分享,很实用·~我现在就在用matlab画图,确实导出的图像不如专门的画图软件~~

smartgirl 发表于 2013-7-7 22:09:22
应该是 export_fig 文件名 吧。 可是为什么我的识别不了扩展名呢?
  1. expot_fig a.fig
复制代码
保存的结果为a.fig.png   这是为什么呢?

winner245 发表于 2013-7-7 22:34:08
smartgirl 发表于 2013-7-7 22:09
应该是 export_fig 文件名 吧。 可是为什么我的识别不了扩展名呢?保存的结果为a.fig.png   这是为什么呢? ...

保存成fig格式是不需要用export_fig的,export_fig是用于从fig文件输出jpg,png,eps,pdf等图形格式(保存fig文件的话,直接在figure窗口save as即可)。你给出的expot_fig a.fig中,export_fig会认为你没有指定图形格式,故默认用了png格式

smartgirl 发表于 2013-7-8 08:55:51
winner245 发表于 2013-7-7 22:34
保存成fig格式是不需要用export_fig的,export_fig是用于从fig文件输出jpg,png,eps,pdf等图形格式(保 ...

哦  原来如此   谢谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表