快速上手MATLAB數(shù)據(jù)可視化(三)
在快速上手MATLAB數(shù)據(jù)可視化(二)中,我們主要介紹圖形繪制界面的句柄操作和屬性設(shè)置函數(shù),主要包括gcf、gca圖形圖像句柄函數(shù),以及set、get的屬性設(shè)置和讀取函數(shù),并通過一個(gè)具體的復(fù)雜繪圖實(shí)例進(jìn)行實(shí)戰(zhàn)演示。
通過上一講的實(shí)例,不難發(fā)現(xiàn),若想繪制高質(zhì)量的科研發(fā)表圖,需要調(diào)用大量函數(shù)和指令對原始圖像進(jìn)行優(yōu)化調(diào)整,從而讓每次繪圖變得極為繁瑣和困難。
那有什么辦法可以實(shí)現(xiàn)更快速更便捷的優(yōu)化呢?
這里拋磚引玉給出兩種方案。
方案A:將你常用的優(yōu)化策略編寫成一個(gè)函數(shù)或腳本,每次繪制后直接調(diào)用。如:將上一講中關(guān)于圖像窗口布局、字體優(yōu)化等通用內(nèi)容寫到一個(gè)函數(shù)中。
function ImgOptimize
%customize a plot to make them publication quality in MATLAB
%%設(shè)置窗口窗格情況
set(gca, ...
'Box' , 'off' , ...
'TickDir' , 'out' , ...
'TickLength' , [.02 .02] , ...
'XMinorTick' , 'on' , ...
'YMinorTick' , 'on' , ...
'YGrid' , 'on' , ...
'XColor' , [.25 .25 .25], ...
'YColor' , [.25 .25 .25], ...
'YTick' , 0:500:2500, ...
'LineWidth' , 1 );
end
方案B:利用別人封裝好函數(shù)、工具箱等進(jìn)行優(yōu)化,從而達(dá)到事半功倍的效果。正所謂,他山之石,可以攻玉。
兩個(gè)方案比較來說,
方案A靈活度更高,操作相對復(fù)雜。更適合有一定MATLAB編程經(jīng)驗(yàn),希望根據(jù)個(gè)人或團(tuán)隊(duì)風(fēng)格定制化繪圖風(fēng)格的同學(xué)。
方案B操作更簡單,容易上手,能在較短時(shí)間內(nèi)獲得較佳的高質(zhì)量發(fā)表圖,適合希望借助MATLAB實(shí)現(xiàn)快速繪圖的同學(xué)。
由于我們這里主要介紹MATLAB的快速應(yīng)用,因此本講主要以方案B為主線,介紹MATLAB自帶的繪圖函數(shù)庫MATLAB Plot Gallery以及兩款你不可不知的優(yōu)秀繪圖工具箱PlotPub與Gramm。
MATLAB軟件本身就提供大量繪圖函數(shù),可以滿足數(shù)據(jù)可視化的基本需求。為了方便大家更直觀地選擇和使用相關(guān)函數(shù),MATLAB Plot Gallery提供了許多在MATLAB中可視化數(shù)據(jù)方式的示例。每一個(gè)實(shí)例都可以查看和下載源代碼,并應(yīng)用在自己的MATLAB程序中。
所以,大家可以先試著去MATLAB Plot Gallery看看有沒有自己心儀的數(shù)據(jù)表示方式,然后根據(jù)示例進(jìn)行修改即可快速繪圖。
附上鏈接:
https://ww2.mathworks.cn/products/matlab/plot-gallery.html
(可能需要注冊與登錄mathworks賬號)
一個(gè)復(fù)雜高質(zhì)量的科學(xué)發(fā)表圖需要調(diào)用大量的set與get函數(shù)對布局、字體、線寬、顏色等細(xì)節(jié)進(jìn)行調(diào)整。那是否可以用面向?qū)ο蟮木幊趟枷牒皖惖慕Y(jié)構(gòu)對這些細(xì)節(jié)進(jìn)行整合呢?
當(dāng)然可以,PlotPub正是基于這樣的想法應(yīng)運(yùn)而生。
在實(shí)際應(yīng)用時(shí),只需要利用addpath函數(shù)將PlotPub對應(yīng)的函數(shù)庫導(dǎo)入即可。
如:addpath('../lib');
附上鏈接:
https://github.com/masumhabib/PlotPub
以三組不同相位的50Hz的正弦電壓信號為例,進(jìn)行應(yīng)用:
%% load PlotPub lib
clear all;
addpath('../lib');
%% lets plot 3 cycles of 50Hz AC voltage
f = 50;
Vm = 10;
phi = pi/4;
% generate the signal
t = [0:0.0001:3/f];
th = 2*pi*f*t;
v1 = Vm*sin(th);
v2 = Vm*sin(th - phi);
v3 = Vm*sin(th - phi*2);
figure;
plot(t*1E3, v1);
hold on;
plot(t*1E3, v2);
plot(t*1E3, v3);
hold off;
原始數(shù)據(jù)繪制圖
下面開始利用PlotPub進(jìn)行調(diào)整:
%% Change properties
plt = Plot();
plt.XLabel = 'Time, t (ms)'; % xlabel
plt.YLabel = 'Voltage, V (V)'; %ylabel
plt.YTick = [-10, 0, 10]; %[tick1, tick2, .. ]
plt.XLim = [0, 80]; % [min, max]
plt.YLim = [-11, 11]; % [min, max]
plt.Colors = { % three colors for three data set
[ 1, 0, 0]
[ 0.25, 0.25, 0.25]
[ 0, 0, 1]
};
plt.LineWidth = [2, 2, 2]; % three line widths
plt.LineStyle = {'-', ':', '--'}; % three line styles
plt.Legend = {'\theta = 0^o', '\theta = 45^o', '\theta = 90^o'}; % legends
% Save
plt.export('plotMultiple2.png');
有時(shí)候,我們也不僅僅滿足于MATLAB自帶的繪圖風(fēng)格,也希望能有一些其他繪圖風(fēng)格可以直接應(yīng)用。
Gramm就是在PlotPub思想的基礎(chǔ)上,進(jìn)一步整合R語言繪圖風(fēng)格,在MATLAB平臺進(jìn)行實(shí)現(xiàn)的這樣一個(gè)優(yōu)秀的繪圖工具箱。
先附上鏈接:
https://github.com/piermorel/gramm
也許你會問R語言的繪圖風(fēng)格是什么樣呢?我們來看下Gramm與MATLAB直接繪圖代碼和結(jié)果的對比。
從上圖中,不難看出,Gramm獨(dú)特的風(fēng)格也十分漂亮,并且代碼量和易讀性也優(yōu)于MATLAB直接編寫。
Gramm的具體函數(shù)庫和說明如下,具體結(jié)合等著你去探索:
本講主要介紹MATLAB自帶的繪圖函數(shù)庫MATLAB Plot Gallery以及兩款你不可不知的優(yōu)秀繪圖工具箱PlotPub與Gramm。
本文作者:張開宇(北京理工大學(xué))
相關(guān)鏈接:
【科研經(jīng)驗(yàn)】如何快速上手MATLAB數(shù)據(jù)可視化(二)
【科研經(jīng)驗(yàn)】快速上手MATLAB數(shù)據(jù)可視化(一)
【科普系列】利用PPT作圖增強(qiáng)科技論文表達(dá)力
【科研經(jīng)驗(yàn)】3D MAX快速入門-簡單基本體構(gòu)建反應(yīng)機(jī)理圖
【科研經(jīng)驗(yàn)】基于Materials Studio的兩相聚合物簡單共混模擬
【科研經(jīng)驗(yàn)】如何用PPT畫簡單示意圖
【科研經(jīng)驗(yàn)】2020版Origin作圖技巧分享
【科研經(jīng)驗(yàn)】如何作出晶體結(jié)構(gòu)渲染圖—crystalmaker小白的逆襲之路
