originlab matlab,Matlab调用Origin作图
Matlab作出的圖普遍沒有Origin作出的美觀好看,而且導出為eps或emf格式后會有各種奇怪的Bug。目前普遍采用的一種方法是,將Matlab數據導出為mat文件后再導入Origin中手工作圖,這種方式需要不少重復性勞動,并不是一種很完美的解決方案。
前幾天偶然看到Origin提供了COM接口可供Matlab調用,于是就研究了下可否用Matlab調用Origin來生成所需的emf格式圖片,最終經過一番折騰,基本完成了這個目標。
之所以能用Matlab來調用Origin,這要依賴于Origin中提供的Automation
Server服務。這個服務提供了一個COM接口來供其他程序調用,官方提供了Matlab、VB、Excel、C#、LabVIEW等諸多程序調用Origin的例子。Automation
Server的詳細使用方法可參考其官方幫助文檔。
Matlab調用Origin的示例程序位于\Samples\COM Server and Client\MATLAB路徑下(以Origin
2015為例,其他版本的位置可能有所不同)。一共有兩個m文件,CreatePlotInOrigin.m及MATLABCallOrigin.m,前者用于實現調用Origin繪圖,并將結果保存到剪貼板中,后者演示了如何創建工作表(Worksheet),如何插入新列等操作。另外一個CreatePlotInOrigin.opj文件是供CreatePlotInOrigin.m調用的一個Origin模板文件。
根據這兩個示例程序基本就可以依葫蘆畫瓢寫出一個符合自己要求的程序了,然而這其中并沒有導出emf格式圖片的示例,于是開始研究其官方幫助文檔……官方幫助文檔很多地方都語焉不詳,而且其間還經歷了種種坑,比如上篇文章這個。不過最終還是找到了正確的解決辦法,就是使用Origin
最終找到的較好的解決方案是這樣的:
首先,用Origin生成一個空白模板工程,其中包含了基本的Worksheet結構及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格式的圖片
% 作者 : 高明飛
% 日期 : 2016-01-27
% mdata : 需要填充到Origin Worksheet中的數據
% template : Origin模板函數名,不含后綴,需要保存在當前工作目錄下,如'CreatePlotInOrigin'
% fdir : 輸出圖片目標文件夾,如'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的名稱需要為Data1,這是由invoke(originObj, 'PutWorksheet', 'Data1',
mdata);這句代碼確定的;
導出的圖片為emf格式,圖像寬度為10000像素,因為這是矢量圖,所以文件體積并不大的。
以上這個版本只是個最基本的版本,不過一般使用也夠用了,更多的高級功能,比如動態調整坐標軸名稱,動態調整x、y軸的范圍以適應不同數據等之后有空再來研究……
文章作者:高明飛
發布時間:2016-01-28, 21:23:24
最后更新:2018-01-21, 17:28:52
總結
以上是生活随笔為你收集整理的originlab matlab,Matlab调用Origin作图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软ERP dynamics Axapt
- 下一篇: 计算机常用命令大全