【科研经验】如何快速上手MATLAB数据可视化(三)
快速上手MATLAB数据可视化(三)
善用优秀绘图工具箱
你不可不知的绘图工具箱
01
导语
在快速上手MATLAB数据可视化(二)中,我们主要介绍图形绘制界面的句柄操作和属性设置函数,主要包括gcf、gca图形图像句柄函数,以及set、get的属性设置和读取函数,并通过一个具体的复杂绘图实例进行实战演示。
通过上一讲的实例,不难发现,若想绘制高质量的科研发表图,需要调用大量函数和指令对原始图像进行优化调整,从而让每次绘图变得极为繁琐和困难。
那有什么办法可以实现更快速更便捷的优化呢?
这里抛砖引玉给出两种方案。
方案A:将你常用的优化策略编写成一个函数或脚本,每次绘制后直接调用。如:将上一讲中关于图像窗口布局、字体优化等通用内容写到一个函数中。
function ImgOptimize
%customize a plot to make them publication quality in MATLAB
%%设置窗口窗格情况
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:利用别人封装好函数、工具箱等进行优化,从而达到事半功倍的效果。正所谓,他山之石,可以攻玉。
两个方案比较来说,
方案A灵活度更高,操作相对复杂。更适合有一定MATLAB编程经验,希望根据个人或团队风格定制化绘图风格的同学。
方案B操作更简单,容易上手,能在较短时间内获得较佳的高质量发表图,适合希望借助MATLAB实现快速绘图的同学。
由于我们这里主要介绍MATLAB的快速应用,因此本讲主要以方案B为主线,介绍MATLAB自带的绘图函数库MATLAB Plot Gallery以及两款你不可不知的优秀绘图工具箱PlotPub与Gramm。
02
MATLAB Plot Gallery
MATLAB软件本身就提供大量绘图函数,可以满足数据可视化的基本需求。为了方便大家更直观地选择和使用相关函数,MATLAB Plot Gallery提供了许多在MATLAB中可视化数据方式的示例。每一个实例都可以查看和下载源代码,并应用在自己的MATLAB程序中。
所以,大家可以先试着去MATLAB Plot Gallery看看有没有自己心仪的数据表示方式,然后根据示例进行修改即可快速绘图。
附上链接:
https://ww2.mathworks.cn/products/matlab/plot-gallery.html
(可能需要注册与登录mathworks账号)
(可点击图片放大观看)
03
PlotPub工具箱
一个复杂高质量的科学发表图需要调用大量的set与get函数对布局、字体、线宽、颜色等细节进行调整。那是否可以用面向对象的编程思想和类的结构对这些细节进行整合呢?
当然可以,PlotPub正是基于这样的想法应运而生。
在实际应用时,只需要利用addpath函数将PlotPub对应的函数库导入即可。
如:addpath('../lib');
附上链接:
https://github.com/masumhabib/PlotPub
●应用实例效果 ●
快速设置颜色、线宽和坐标轴
以三组不同相位的50Hz的正弦电压信号为例,进行应用:
%% 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;
原始数据绘制图
下面开始利用PlotPub进行调整:
%% 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');
调整后的结果
相比于传统的set与get函数,利用PlotPub是否更加易写、易读与高效呢?
此外,PlotPub的示例中,还提供了:
①窗格中绘图区域大小设置。
②栅格比例、坐标轴标签等参数设置。
③多曲线标记点、颜色、线型设置。
......
并且作者还提供了详细的手册信息,辅助用户调用其函数进行作图。
具体细节,大家可以前往其主页作进一步的了解。
附上链接:
PlotPub: Publication Quality Graph v2.0 released
http://masumhabib.com/blog/plotpub-publication-quality-graph-v2-0-released/
PlotPub-v2.0 Documentation
http://masumhabib.com/projects/publication-quality-graphs-matlab/plotpub-v2-0-documentation/
04
Gramm工具箱
有时候,我们也不仅仅满足于MATLAB自带的绘图风格,也希望能有一些其他绘图风格可以直接应用。
Gramm就是在PlotPub思想的基础上,进一步整合R语言绘图风格,在MATLAB平台进行实现的这样一个优秀的绘图工具箱。
先附上链接:
https://github.com/piermorel/gramm
也许你会问R语言的绘图风格是什么样呢?我们来看下Gramm与MATLAB直接绘图代码和结果的对比。
(可点击图片放大观看)
从上图中,不难看出,Gramm独特的风格也十分漂亮,并且代码量和易读性也优于MATLAB直接编写。
Gramm的具体函数库和说明如下,具体结合等着你去探索:
(可点击图片放大观看)
05
小结
本讲主要介绍MATLAB自带的绘图函数库MATLAB Plot Gallery以及两款你不可不知的优秀绘图工具箱PlotPub与Gramm。
●END ●
本文作者:张开宇(北京理工大学)
相关链接:
【科研经验】基于Materials Studio的两相聚合物简单共混模拟
【科研经验】如何作出晶体结构渲染图—crystalmaker小白的逆袭之路