用Matlab创建的图通常看起来不像用Origin创建的图。 另外,导出为eps或emf格式会有各种奇怪的错误。 目前一种常用的方法是将Matlab数据导出到mat文件,然后导入到Origin进行手工绘制,这种方法需要大量的重复工作,并不是一个完美的解决方案。
不久前,偶然看到Origin提供了用于从Matlab调用的COM接口,研究了能否从Matlab调用Origin生成所需的emf格式的图像,最终费了很大的力气,基本上实现了这个目标。
在Matlab中调用Origin取决于Origin提供的自动
服务器服务。 该服务提供了其他程序调用的COM接口,官方提供了Matlab、VB、Excel、C#、LabVIEW等多个程序调用Origin的例子。 自动驾驶仪
有关如何使用服务器的详细说明,请参阅官方帮助文档。
Matlab调用Origin的示例程序位于 samplescomserverandclientMATLAB路径下(
以2015为例,其他版本的位置可能不同)。 有两个文件: CreatePlotInOrigin.m和MATLABCallOrigin.m,演示如何调用Origin图形并将结果保存到剪贴板、如何创建工作表以及如何插入新列。 另一个CreatePlotInOrigin.opj文件是CreatePlotInOrigin.m调用的Origin模板文件。
基于这两个示例程序,基本上可以按葫芦瓢编写符合自己要求的程序,但其中没有导出emf格式图像的例子,于是开始研究官方帮助文档……官方帮助文档在很多地方语言不通,其间也同样如此比如上一篇文章那样。 但是,最终找到了正确的解决方案。 就是使用Origin
最终找到的好解决方案如下。
首先,使用Origin生成包含基本工作表结构和Graph样式(如示例文件中提供的)的空白模板项目。
在此模板项目中,您只需在Worksheet中输入数据,就可以确保生成Graph所需的图,如下所示:
这里的Worksheet和Graph可以不止一个,但一般一个就足够了。
创建模板文件后,只需用Matlab程序从COM界面中调用Origin,打开此模板文件,在其中的Worksheet中填写正确的数据,最后导出图像文件即可。
Matlab程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
调用Origin绘图并将其另存为emf格式的图像
%作者: wmdmj
%第: 2016-01-27天
% mdata :必须在原始工作表上输入数据
必须将% template : Origin模板函数名称、无后缀和“CreatePlotInOrigin”保存在当前工作目录中
% fdir :输出图像输出目标文件夹,如“D:image”
% fname :输出图像文件名,不带后缀,如“abc”
functionoriginplot (元数据、模板、fdir、fname ) )。
% Obtain Origin COM Server object
% thiswillconnecttoanexistinginstanceoforigin,or create a new one if none exist
origin obj=a CTX server (origin.applicationsi );
% clear ' dirty ' flaginorigintosuppresspromptforsavingcurrentproject
invoke(Originobj,' IsModified ',' false ' );
% load the自定义模板项目
dir=pwd;
dir=strcat(dir,'',template,'.opj ' );
invoke(Originobj,' Load ',dir );
% sendthisdataovertothedata1worksheet
invoke(Originobj,' PutWorksheet ',' Data1 ',mdata );
% Save graph
cmd=' expgraphtype :=emf overwrite :=rename tr1. unit :=2tr1. width :=10000 path :=' ';
cmd=strcat(cmd,fdir,' ' filename:=',fname,'.emf ' ); ();
invoke(Originobj、' Execute '、cmd );
% Release
release(Originobj );
结束
在上述步骤中,Worksheet的名称必须为Data1。 这是根据invoke(Originobj,' PutWorksheet ',' Data1 ),
mdata; 这个代码确定了;
导出的图像为emf格式,图像宽度为10000像素。 这是向量图像,所以文件的体积不大。
以上版本是最基本的版本,但普通使用也足够了。 使用动态调整坐标轴的名称、动态调整x、y轴的范围以适应不同的数据等更多高级功能后再研究吧……
文章作者:wmdmj
发布时间:2016-01-28、2133602:24
最后更新:2018-01-21、17:28:52