如何在MATLAB中导出矢量图
1、楼主的分享精神值得赞赏,但不得不说,楼主以及楼上对MTALAB如何导出矢量图的理解还不够深入。我刚好多年前对此有过研究,不妨也和两位一起分享一下。
2、楼主所说的方法:
uimenufcn(gcf,'EditCopyFigure')
与直接使用菜单命令Edit --> Copy Figure在绝大多数情况下并没有区别,事实上,该菜单回调函数大致如下(不同版本可能会有细微差别):
if (ismac && ~isempty(get(hfig, 'JavaFrame')))
% get the figure bits into an image
% To Do - use hardcopy or print instead
data = getframe(hfig);
cda = data.cdata;
% put the image onto the clipboard
im = im2java(cda);
jm = javax.swing.ImageIcon(im);
im_obj = jm.getImage;
cb = java.awt.Toolkit.getDefaultToolkit.getSystemClipboard;
cb.setContents(com.mathworks.hg.util.ImageSelection(im_obj),[]);
%disp('tried to copy to clipboard')
else
uimenufcn(hfig, 'EditCopyFigure')
end
前面if分支的那一大堆代码都是对于MAC平台的,对于多数使用Windows的朋友,就是后面else分支的那一句而已。
3、接下来,我重点要说的问题就是,上面的方法并不能保证导出的是矢量图。这是因为,在上面说到的Copy Figure菜单后面,还有一个〖Copy Options...〗菜单,用于设置导出图形的选项:
默认选项是Preserve information,即由MATLAB自动决定使用何种格式(在可能的情况下优先使用矢量图)。
那么,现在有两个问题:
(1)如果你在这里的选择是Bitmap,用上面的命令还能导出矢量图吗?答案当然是否定的(不信的话,不妨自己验证一下);
(2)如果按照默认的选项(Preserve information),试一试
peaks;
set(findall(gcf,'type','surface'),'facealpha',0.4)
uimenufcn(gcf,'EditCopyFigure')
再贴到Word里看看,是不是矢量图?
4、关于eps格式:很多学术期刊对图片的要求是这种格式,但EPS格式在word中显示并不正常(通常看起来比较粗糙,但如果转换成pdf文件则能正常显示)。这个问题我之前研究过,但并不深入,有些问题解决的也不彻底,就不多说了。
1、uimenufcn(gcf,'EditCopyFigure') 命令并回车,然后直接到Word中粘贴即可。
2、与直接使用菜单命令Edit --> Copy Figure在绝大多数情况下并没有区别,事实上,该菜单回调函数大致如下(不同版本可能会有细微差别):
前面if分支的那一大堆代码都是对于MAC平台的,对于多数使用Windows的朋友,就是后面else分支的那一句而已。
3、接下来,重点要说的问题就是,上面的方法并不能保证导出的是矢量图。这是因为,在上面说到的Copy Figure菜单后面,还有一个【Copy Options...】菜单,用于设置导出图形的选项:
默认选项是Preserve information,即由MATLAB自动决定使用何种格式(在可能的情况下优先使用矢量图)。
4、那么,现在有两个问题:
(1)如果在这里的选择是Bitmap,用上面的命令还能导出矢量图吗?答案当然是否定的;
(2)如果按照默认的选项(Preserve information),试一试
此时的图片已经是矢量图
5、关于eps格式:很多学术期刊对图片的要求是这种格式,但EPS格式在word中显示并不正常(通常看起来比较粗糙,但如果转换成pdf文件则能正常显示)。
我有试过几次都没有成功,最后还是我的上面说的方法奏效了
我采用的是matlab7.6.0,选择file,然后下拉菜单里面的save as,保存图片格式为.eps(矢量图的格式),存出来,然后导入到word2007,测试过可实现。同时你还可以通过Export setup选项修改保存出来的图片参数。