originlab matlab,Matlab调用Origin作图
Matlab作出的圖普遍沒(méi)有Origin作出的美觀好看,而且導(dǎo)出為eps或emf格式后會(huì)有各種奇怪的Bug。目前普遍采用的一種方法是,將Matlab數(shù)據(jù)導(dǎo)出為mat文件后再導(dǎo)入Origin中手工作圖,這種方式需要不少重復(fù)性勞動(dòng),并不是一種很完美的解決方案。
前幾天偶然看到Origin提供了COM接口可供Matlab調(diào)用,于是就研究了下可否用Matlab調(diào)用Origin來(lái)生成所需的emf格式圖片,最終經(jīng)過(guò)一番折騰,基本完成了這個(gè)目標(biāo)。
之所以能用Matlab來(lái)調(diào)用Origin,這要依賴(lài)于Origin中提供的Automation
Server服務(wù)。這個(gè)服務(wù)提供了一個(gè)COM接口來(lái)供其他程序調(diào)用,官方提供了Matlab、VB、Excel、C#、LabVIEW等諸多程序調(diào)用Origin的例子。Automation
Server的詳細(xì)使用方法可參考其官方幫助文檔。
Matlab調(diào)用Origin的示例程序位于\Samples\COM Server and Client\MATLAB路徑下(以O(shè)rigin
2015為例,其他版本的位置可能有所不同)。一共有兩個(gè)m文件,CreatePlotInOrigin.m及MATLABCallOrigin.m,前者用于實(shí)現(xiàn)調(diào)用Origin繪圖,并將結(jié)果保存到剪貼板中,后者演示了如何創(chuàng)建工作表(Worksheet),如何插入新列等操作。另外一個(gè)CreatePlotInOrigin.opj文件是供CreatePlotInOrigin.m調(diào)用的一個(gè)Origin模板文件。
根據(jù)這兩個(gè)示例程序基本就可以依葫蘆畫(huà)瓢寫(xiě)出一個(gè)符合自己要求的程序了,然而這其中并沒(méi)有導(dǎo)出emf格式圖片的示例,于是開(kāi)始研究其官方幫助文檔……官方幫助文檔很多地方都語(yǔ)焉不詳,而且其間還經(jīng)歷了種種坑,比如上篇文章這個(gè)。不過(guò)最終還是找到了正確的解決辦法,就是使用Origin
最終找到的較好的解決方案是這樣的:
首先,用Origin生成一個(gè)空白模板工程,其中包含了基本的Worksheet結(jié)構(gòu)及Graph樣式,比如示例文件中提供的這個(gè):
這個(gè)模板工程需要保證只要向Worksheet中填入數(shù)據(jù),Graph中就能生成所需的圖,就像這樣:
這里的Worksheet和Graph可以不止有一個(gè),不過(guò)一般情況下一個(gè)就足夠了。
制作好了模板文件后,在Matlab程序中只需要通過(guò)COM接口調(diào)用Origin,打開(kāi)這個(gè)模板文件,然后向其中的Worksheet填入正確的數(shù)據(jù),最后導(dǎo)出圖片文件即可。
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
% 調(diào)用Origin作圖并保存為emf格式的圖片
% 作者 : 高明飛
% 日期 : 2016-01-27
% mdata : 需要填充到Origin Worksheet中的數(shù)據(jù)
% template : Origin模板函數(shù)名,不含后綴,需要保存在當(dāng)前工作目錄下,如'CreatePlotInOrigin'
% fdir : 輸出圖片目標(biāo)文件夾,如'D:\image'
% fname : 輸出圖片文件名,不含后綴,如'abc'
function OriginPlot(mdata, template, fdir, fname)
% Obtain Origin COM Server object
% This will connect to an existing instance of Origin, or create a new one if none exist
originObj=actxserver('Origin.ApplicationSI');
% Clear "dirty" flag in Origin to suppress prompt for saving current project
invoke(originObj, 'IsModified', 'false');
% Load the custom template project
dir = pwd;
dir = strcat(dir, '\', template, '.opj');
invoke(originObj, 'Load', dir);
% Send this data over to the Data1 worksheet
invoke(originObj, 'PutWorksheet', 'Data1', mdata);
% Save graph
cmd = 'expGraph type:=emf overwrite := rename tr1.unit := 2 tr1.width := 10000 path:= "';
cmd = strcat(cmd, fdir, '" filename:= "', fname, '.emf";');
invoke(originObj, 'Execute', cmd);
% Release
release(originObj);
end
上面這段程序中要求Worksheet的名稱(chēng)需要為Data1,這是由invoke(originObj, 'PutWorksheet', 'Data1',
mdata);這句代碼確定的;
導(dǎo)出的圖片為emf格式,圖像寬度為10000像素,因?yàn)檫@是矢量圖,所以文件體積并不大的。
以上這個(gè)版本只是個(gè)最基本的版本,不過(guò)一般使用也夠用了,更多的高級(jí)功能,比如動(dòng)態(tài)調(diào)整坐標(biāo)軸名稱(chēng),動(dòng)態(tài)調(diào)整x、y軸的范圍以適應(yīng)不同數(shù)據(jù)等之后有空再來(lái)研究……
文章作者:高明飛
發(fā)布時(shí)間:2016-01-28, 21:23:24
最后更新:2018-01-21, 17:28:52
總結(jié)
以上是生活随笔為你收集整理的originlab matlab,Matlab调用Origin作图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微软ERP dynamics Axapt
- 下一篇: 计算机常用命令大全