01导语
在快速上手MATLAB数据可视化(一)中,我们主要介绍如何快速应用MATLAB常见的散点图、二维图、三维图、曲面图基本函数进行绘图,以及如何通过配色方案设置与手动设置标签技巧达到高质量期刊图像的可视化效果。
而相比于其他图形界面化绘图软件,MATLAB最大的优势在于可以通过脚本编程的方式对图像界面的句柄和属性进行高效率复杂操作。因此,本讲主要介绍图形绘制界面的句柄操作和属性设置技巧,并通过一个具体复杂绘图实例进行实战。
02图形的句柄操作和属性设置
●什么是句柄与属性 ●
MATLAB图形窗口由不同的对象(如坐标轴、曲线、曲面或文字等)组成图形界面。MATLAB给每个图形对象分配一个标识符,称为句柄,给每个对象的每一个属性分配一个名字,称为属性名,而属性名的取值称为属性值。通过该句柄对该图形对象的属性进行设置,同时亦可获取相关的属性值,从而实现复杂的图形绘制。
●常用图形对象的句柄函数 ●
gcf
当前图形的句柄
fig = gcf
返回当前图形的句柄。如果图形不存在,则 gcf 将创建一个图形并返回其句柄。可以使用图形句柄查询和修改图形的属性。
surf(peaks)fig = gcf;
% 获取当前图形句柄
fig.Color = [0 0.5 0.5];
% 设置背景颜色
fig.ToolBar = 'none';
% 取消工具栏显示
gca
当前坐标轴或图句柄
ax = gca
返回当前图形的当前坐标轴或图,这通常是最后创建的图形或用鼠标点击的最后一个图形。图形函数(例如 title)的目标为当前坐标轴或图。
figure
x = linspace(0,10);
y = sin(4*x);
plot(x,y);
ax = gca;
% 获取当前坐标轴句柄
ax.FontSize = 12;
% 设置文字大小
ax.TickDir = 'out';
% 设置刻度向外
ax.TickLength = [0.02 0.02];
%设置刻度长度
ax.YLim = [-2 2];
% 设置坐标轴范围
●常用属性操作函数 ●
set
设置图形对象属性
set(H,Name,Value)
为 H 标识的对象指定其 Name 属性的值。
set(H,NameArray,ValueArray)
使用元胞数组 NameArray 和 ValueArray 指定多个属性值。
将三个不同针状序列的 Marker 和 Tag 属性设置为不同值。
值元胞数组的每一行对应于 h 中的一个对象且包含两个值,一个对应于 Marker 属性,一个对应于 Tag 属性。
x = 0:30;
y = [1.5*cos(x); 4*exp(-.1*x).*cos(x); exp(.05*x).*cos(x)]';
S = stem(x,y);
NameArray = {'Marker','Tag'};
ValueArray = {'o','Decaying Exponential';...
'square','Growing Exponential';...
'*','Steady State'};
set(S,NameArray,ValueArray)
get
查询图形对象属性
v = get(h)
返回 h 标识的图形对象的所有属性和属性值。
v = get(h,propertyName)
返回特定属性 propertyName 的值。
p = plot(1:10);
get(p)
在实际绘图中,通过配合set和get函数的使用,实现对不同对象属性的设置和读取。
03复杂绘图实战
下面以同一坐标轴下多曲线绘制为例的脚本进行实战说明:
%%读取数据
load data
%%创建图形窗口并指定可绘制区域的位置和大小
figure('Position', [100 100 600 475]);
hold on;
%%根据数据绘制曲线
%%拟合曲线
lineFit = line(xdata_fit , ydata_fit );
%%测量曲线误差棒图
Measument = errorbar(xdata_m, ydata_m, ydata_s);
%%验证数据曲线
Data = line(xVdata, yVdata );
%%数据模型曲线1
Model = line(xmodel, ymodel );
%%置信区间曲线1
hCI(1) = line(xmodel, ymodelL);
%%置信区间曲线2
hCI(2) = line(xmodel, ymodelU);
%设置图像标题和横纵坐标轴名称
Title = title ('Graphics title');
XLabel = xlabel('xlabel (unit)');
YLabel = ylabel('ylabel (unit)');
%图表中显示拟合函数关系式
Text = text(5, 800, ...
sprintf('\\it{y = y(x)}'));
%%设置图例特性
hLegend = legend( ...
[Measument, lineFit, Data, Model, hCI(1)], ...
'Data (\mu \pm \sigma)' , ...
'Fit (\it{C x^3+b x^2})' , ...
'Data' , ...
'Model (\it{C x^3})' , ...
'Interval Estimation' , ...
'location', 'NorthWest' );
%%设置字体、字符大小
set( gca , ...
'FontName' , 'Helvetica' );
set([Title, XLabel, YLabel, Text], ...
'FontName' , 'AvantGarde');
set([hLegend, gca] , ...
'FontSize' , 8 );
set([XLabel, YLabel, Text] , ...
'FontSize' , 10 );
set( Title , ...
'FontSize' , 12 , ...
'FontWeight' , 'bold' );
%设置每组曲线的颜色、类型、标记点、线宽等
set(lineFit , ...
'Color' , [0 .5 0] );
set(Measument , ...
'LineStyle' , 'none' , ...
'Marker' , '.' , ...
'Color' , [.5 .5 .5] );
set(Data , ...
'LineStyle' , 'none' , ...
'Marker' , '.' );
set(Model , ...
'LineStyle' , '--' , ...
'Color' , 'r' );
set(hCI(1) , ...
'LineStyle' , '-.' , ...
'Color' , [0 0 0.5] );
set(hCI(2) , ...
'LineStyle' , '-.' , ...
'Color' , [0 0 0.5] );
set(lineFit , ...
'LineWidth' , 2 );
set(Measument , ...
'LineWidth' , 1.5 , ...
'Marker' , 'o' , ...
'MarkerSize' , 6 , ...
'MarkerEdgeColor' , [.3 .3 .3] , ...
'MarkerFaceColor' , [.7 .7 .7] );
set(Data , ...
'Marker' , 'o' , ...
'MarkerSize' , 5 , ...
'MarkerEdgeColor' , 'none' , ...
'MarkerFaceColor' , [.6 .6 1] );
set(Model , ...
'LineWidth' , 2 );
set(hCI(1) , ...
'LineWidth' , 2 );
set(hCI(2) , ...
'LineWidth' , 2 );
%%设置窗口窗格情况
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 );
04小结
本讲主要介绍图形绘制界面的句柄操作和属性设置函数,主要包括gcf、gca图形图像句柄函数,以及set、get的属性设置和读取函数,并通过一个具体的复杂绘图实例进行实战演示。
●END ●
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删