1、Matlab图形系统简介
Matlab的图形系统是面向对象的,图形对象之间的关系为父代与子代的关系。
图4 pic04.jpg
每个图形对象都拥有自己的句柄 ( handle )。所有能创建图形对象的matlab函数都可给出所创建图形对象的句柄。
根(Root):只有一个,对应于计算机屏幕,其句柄为 0。其它图形对象都是root 的子对象。
图形窗口(Figure):数目不限,句柄为正整数。除根之外,其它对象都是figure的子对象。
其它图形对象(如坐标轴axis)的句柄为浮点数。
图形对象是由其属性来描述的。高层绘图函数对图形对象的描述一般是缺省的或由高层绘图函数自动设置。底层绘图函数用句柄设置图形对象的属性。
句柄属性的设置与修改
get 获得句柄图形对象的属性和返回某些对象的句柄值
set 改变图形对象的属性
delete(h) 删除句柄为h的图形对象
专用函数
gcf 返回当前窗口对象的句柄 Get Current Figure
gca 返回当前轴对象的句柄 Get Current Axes
gco 返回当前图形对象的句柄 Get Current Object
若一个对象的句柄已知,可以获取其"父"或"子"的句柄
f = get(h,'parent');
l = get(h,'children');
2、根对象( Root )
Root 是关联计算机屏幕的一个图形对象。Matlab系统只有一个Root对象,它没有父对象,子对象是Figure。当启动Matlab时,Root对象就创建,用户无法再创建一个Root,也无法删除这个对象,Root的句柄值为 0。
root 的 属性
属性名称 | 意义 | 取值 |
CurrentFigure | 当前图形窗口的句柄 | figure的句柄 |
children | 所有子对象的句柄 | 句柄数组 |
Units | 度量单位 | pixel,inches等 |
ScreenSize | 屏幕的大小 | [left,bottom,width,height] |
docsearch 'root properties':在帮助中查询 root 的所有属性 |
root 的 ScreenSize 属性:只读属性,默认单位为像素( pixel ),由屏幕的左下角坐标、宽度、高度四个参数确定。
>> ss = get(0,'ScreenSize'),返回行向量 ss = [ left, bottom, width, height ]
图5 pic05.jpg
3、图形窗口 ( Figure)
Figure对象是Matlab系统中显示的图形窗口。用户可建立任意多个Figure窗。所有Figure对象的父对象都是Root对象,而其他所有Matlab图形对象都是Figure的子对象。
figure( ):创建图形窗口
close( ):删除图形窗口
clf( ) :图形图形窗口中的子对象
gcf:返回当前窗口对象的句柄
→figure 利用缺省属性值来创建新的图形窗口对象。
→figure('PropertyName',propertyvalue,...) 利用指定的属性值来创建图形窗口对象。对于用户没有显式地定义的属性值,将其设置为默认的属性值。
→figure(h) 如果句柄h所指示的图形窗口对象存在,则将其设置为当前窗口,并将其移动到屏幕的最前方。如果h所指示的图形窗口不存在且h是个整数 (h >= 1),则创建一个图形窗口,并将窗口的句柄设置为h;如果h不是整数,则返回错误信息。
→h = figure(...) 返回图形窗口对象的句柄。
备注:为了在一个已有的图形窗口中绘制图形,这个窗口必须是激活的,或者是当前的图形窗口。
删除图形窗口:close
→close 删除当前figure,相当于close(gcf)
→close(h) 删除由h确定的figure。如果h是一个向量或矩阵,就删除由h指定的所有图像
→close name 删除指定名称的figure
→close all 删除所有句柄没有隐藏的figure
→close all hidden 删除所有figure,包括句柄隐藏的。
→status = close(...) 如果指定的figure已经被删除则返回1,否则为0。
清除图形窗口中的子对象:clf
→clf 删除当前图形窗口中、句柄未被隐藏(即它们的HandleVisibility属性为on)的图形对象。
→clf('reset') 或 clf reset删除当前图形窗口中的所有图形对象,无论其句柄是否被隐藏,同时将图形窗口的属性(除Position, Units, PaperPosition, PaperUnits外)恢复为默认值。
→clf(fig) 或clf(fig,'reset') 清除由句柄为fig的图形窗口中的内容。
→figure_handle = clf(...) 返回图形窗口的句柄,
Figure 的一些属性
属性名称 | 意义 | 取值 |
Color | 背景色 | 颜色字符串或[r g b] |
CurrentAxes | 当前坐标轴句柄 | 坐标轴句柄 |
CurrentObject | 当前对象的句柄 | 对象句柄 |
HandleVisibility | 句柄是否可见 | {on} | callback | off |
NumberTitle | figure的数字标识 | ' on | off ' |
Name | 名称 | 字符串 |
NextPlot | 新图如何输出 | new | {add} | replace | replacechildren |
Position | 窗口位置、大小 | [ left, bottom, width, height ] |
Resize | 窗口大小是否可调 | ' on | off ' |
Toolbar | 开/关工具条 | ' none | figure | auto ' |
MenuBar | 开/关菜单 | ' none | figure | auto ' |
Tag | "文字标识" | 字符串 |
WindowStyle | 窗口显示模式 | ' normal | modal | docked ' |
Visible | 控制可视性 | ' on | off ' |
docsearch 'figure properties':在帮助中查询 figure 的所有属性 |
figure 的 Position 属性
Position由行向量 [ left, bottom, width, height ] 确定
图6 pic06.jpg
例:figure的Position, Color, … 属性
x = 0:pi/10:2*piss = get(0,'ScreenSize')
W = ss(3);
H = ss(4);figure(1)
set(gcf,'Position',[W/2,H/2,W/3,H/4])
set(gcf,'Name','sin(x)的图像','NumberTitle','off')
plot(x,sin(x))h = figure
set(h,'Position',[W/2,H/10,W/3,H/4])
set(h,'Name','cos(x)的图像','Color',[1,1,1])
set(1,'Toolbar','none','Menubar','none')
plot(x,cos(x))
图7 pic07.jpg
new | 创建一个新的图形窗口并作为当前窗口 |
add | 在当前窗口中绘图,不清除任何已存在的图形对象 |
replacechildren | 删除所有HandleVisibility属性为on的子对象,并重置figure的NextPlot属性 值为add ,这相当于调用clf命令 |
replace | 移除所有子对象,不管其HandleVisibility属性值,并重置figure的属性值为默认值, 但Position、units、PaperPosition和PaperUnits属性值不被重置。 NextPlot属性重置为add。 这相当于调用clf reset命令。 |
e.g.
x = 0:0.1:7; h = figure; plot(x,sin(x)); | x = 0:0.1:7; h = figure; set(h,'NextPlot','new'); plot(x,sin(x)); |
生成一个Figure,直接绘图 | 生成两个Figure,但只在第二个Figure中绘制 |
figure 的Visible属性:
若将figure 的 Visible 属性设为off,则在某些情况下可以大幅度提高程序运行的速度。譬如,在保存图像的时候并不需要绘制图像,此时即可将Visible属性关掉,即变成后台绘制。
4、坐标轴 (axes )
Axes对象:在图形窗口中定义一个画图区域,父对象是Figure,子对象包括line对象、image对象、patch对象、surface对象、light对象和text对象等。
常用函数
axes( ):创建坐标轴
cla:清除坐标轴中的子对象
gca:返回当前轴对象的句柄
axis( ):设置坐标轴的常见属性
xlim( ) / ylim( ) / zlim( ):设置x / y / z 轴刻度范围
grid:设置坐标轴网格线的显示
box:设置坐标轴边框的显示
xlabel( ) / ylabel( ) / zlabel( ):设置x / y / z轴的标注
创建坐标轴 axes( )
→axes 在当前figure内使用默认属性值来创建一个坐标轴对象。
→axes('PropertyName',propertyvalue,...) 创建具有指定的属性值的坐标轴对象。对于其它未明确指定的属性值,MATLAB采用这些属性的默认值。
→axes(h) 当句柄为h的坐标轴对象存在时,设置该坐标轴为当前坐标轴,并使含有该坐标轴的图形窗口对象获得焦点。同时,将该坐标轴的句柄h 置于图形窗口的Children属性值的第一位,并把图形窗口的CurrentAxes属性值设置为h。当前坐标轴为用户用来绘制图像、线条、补片、矩形、曲面以及文本图形对象的目标坐标轴。如果用户想将坐标轴设置为当前坐标轴同时又不改变图形窗口的状态,则可以设置图形窗口的CurrentObject属性:set(figure_handle,'CurrentAxes',axes_handle), 这在一个图形窗口被最小化或者在其它窗口的后面,而用户又想设置它所包含的坐标轴为当前坐标轴时是非常有用的。
→h = axes(...) 返回创建的坐标轴对象的句柄。
axes 的一些属性
属性名称 | 意义 | 取值 |
Color | 背景色 | [ r g b ] |
ColorOrder | 颜色序列 | [ r1 g1 b1; r2 g2 b2; … ] |
LineStyleOrder | 线型序列 | 字符串 - * | : | o |
NextPlot | 新图如何绘制 | add | {replace} | replacechildren |
Position | 指定位置、大小 | [200 200 1000 400] |
LineWidth | 坐标轴线宽 | 数值 |
TickDir | 刻度线的方向 | ' in | out ' |
TickLength | 刻度线的长度 | [2DLength 3DLength] |
docsearch 'axes properties':在帮助中查询 axes 的所有属性 |
axes 的 Position 属性
Position由行向量 [ left, bottom, width, height ] 确定
图8 pic08.jpg
add | 在当前坐标轴内绘图,保留所有已存在的图形对象 |
replacechildren | 删除所有HandleVisibility属性为on的子对象,但不重置坐标轴的属性。 这相当于调用cla命令 |
replace | 移除所有子对象,不管其 HandleVisibility 属性值,并重置 figure 的属性值为默认值,但position 和 Units 属性除外。 这相当于 cla reset命令 |
figure
h1 = axes('position',[0.08,0.1,0.4,0.4])
h2 = axes('position',[0.6,0.1,0.35,0.7])
h3 = axes('position',[0.08,0.6,0.4,0.3])
set(h1,'Color',[0.5,0.5,0.5],'XColor',[1,0,0],'LineWidth',2)
set(h1,'TickDir','out','TickLength',[0.04,0.03])
set(h2,'TickLength',[0.06,0.02])
图9 pic09.jpg
Properties That Control the X-, Y-, or Z-Axis
XColor, YColor, ZColor | Color of axis lines |
XDir, YDir, ZDir | {normal} | reverse |
XGrid, YGrid, ZGrid | on | {off} |
XLabel, YLabel, ZLabel | handle of text object |
XLim, YLim, ZLim | [minimum maximum] |
XLimMode, YLimMode, ZLimMode | {auto} | manual |
XMinorGrid, YMinorGrid, ZMinorGrid | on | {off} |
XMinorTick, YMinorTick, ZMinorTick | on | {off} |
XScale, YScale, ZScale | {linear} | log |
XTick, YTick, ZTick | vector of data values locating tick marks |
XTickLabel, YTickLabel, ZTickLabel | string |
XTickMode, YTickMode, ZTickMode | {auto} | manual |
XTickLabelMode, YTickLabelMode, ZTickLabelMode | {auto} | manual |
例:XLim, XTick, XTickLabel设置
图10 pic10.jpg
清除坐标轴中的子对象:cla
→cla:删除当前坐标系下的所有未设置隐藏的图形对象。
→cla reset :删除当前坐标系下所有图形对象,不论是否设置了隐藏。同时将axes的属性(除Position, Units外)设置为默认值。
→cla(ax) 或cla(ax,'reset') :清除由句柄ax所指坐标系。
设置坐标轴的常用属性:axis( )
→v = axis 返回包含当前坐标范围的行向量v, v具有四个或六个元素,这取决于当前坐标轴是二维的还是三维的。
→axis([xmin, xmax, ymin, ymax]) 2d
→axis([xmin, xmax, ymin, ymax, zmin, zmax]) 3d
人工设置坐标范围,允许取 inf 或 –inf ,即坐标上限或下限时自动产生的,即坐标范围"半自动确定"。
→axis auto 基于x、y和z的最大值和最小值来自动设置坐标轴范围。用户可以只限定某一个坐标轴,如:axis 'auto x' 用来限定x轴的范围;axis 'auto yz' 用来限定y轴和z轴的范围。
→axis manual和axis(axis) 冻结当前坐标轴范围。如果打开了hold on命令,则后续的图形都使用同样的坐标范围。该函数设置XLimMode、YLimMode和ZLimMode属性为manual。
→axis tight 采用紧密模式设置当前坐标轴范围,即以用户数据范围为坐标轴范围。
→axis fill 设置坐标轴范围及PlotBoxAspectRatio属性使得坐标轴填充由 position 确定的矩形局域。
只有PlotBoxAspectRatioMode 或 DataAspectRatioMode属性值为 manual时,该方法才起作用。
→axis equal 设置当前坐标轴的横纵轴具有相同的单位长度。 axis image 功能与axis equal相同。但坐标轴的边框紧贴在数据的四周。多用来显示图片。 axis square 调整坐标系的x、y和z轴,使它们有相同的长度。
→axis normal 自动调整横纵轴比例,使图形显示达到最佳效果
图11 pic11.jpg
→axis vis3d 锁定坐标轴的纵横比,避免三维旋转时变化。
→axis off 关闭所有坐标轴线、刻度标记和标签。
→axis on 打开所有坐标轴线、刻度标记和标签。
→axis ij 坐标系的原点设置到左上角。i 轴为垂直轴,正方向为从上到下。j 轴为水平轴,正方向为从左到右。
→axis xy 坐标系的原点在左下角。x轴为水平坐标轴,正方向为从左到右,y轴为垂直坐标轴,正方向为从下到上。
→axis(axes_handles,...) 将axis命令应用于指定的坐标轴对象。
例如,下面的代码将两个坐标轴都设置为square
h1 = subplot(221);
h2 = subplot(222);
axis([h1 h2],'square')
[mode,visibility,direction] = axis('state') 返回三个字符串,用来表示坐标轴的当前属性值.
mode ' auto ' | ' manual '
visibility ' on ' | ' off '
direction ' xy ' | ' ij '
如果XLimMode、YLimMode和ZLimMode都设置为auto,则mode的值为auto;如果XLimMode、YLimMode和ZLimMode中有一个的值设为manual,则mode的值为manual。
xlim( ) / ylim( ) / zlim( )
当用户只想改变一个坐标轴的坐标限的时候,axis命令就显得很麻烦,这时可以使用xlim、ylim和zlim函数进行设置。
→xlim :返回包含x坐标范围的行向量
→xlim([xmin xmax]) :设置x的坐标范围
→xlim('mode') : 返回x坐标的设置模式 ( auto 或 manual)lim('auto'):设置x坐标的模式为 auto.
→xlim('manual') :设置x坐标的模式为 manual.
→xlim(axes_handle,...) :设置指定的坐标轴的x坐标范围
grid
→grid on:对当前坐标系添加主要网格线。 grid off:对当前坐标系移除主要/细节网格线。grid : 在grid on / grid off两个状态间切换。
→grid(axes_handle,...) 对指定的坐标系设置网格线是否显示
→grid minor : 对当前坐标系设置添加细节网格
box
→box on :当前坐标系的坐标轴框边界。
→box off :当前坐标系不显示坐标轴边框。
→box:切换当前坐标系坐标轴边框的显示。
→box(axes_handle,...) :对指定的坐标系显示坐标轴开关。
5、 保持图形:hold
hold on:启动图形保持功能,当前坐标轴和图形都将保持,此后绘制的图形都将添加在这个图形的基础上,并且自动调整坐标轴的范围。hold on 就是将当前窗口和当前坐标轴的 'NextPlot'属性设置为'add' 。
→hold all:启动图形保持功能,但不重置ColorOrder和 LineStyleOrder 两个属性。
→hold off:关闭图形保持功能,将当前的窗口中的图形释放,用以绘制新的图形。hold off 就是将当前坐标轴的'NextPlot'属性设置为'replace' 。
→hold:在hold on/off两种状态之间进行切换。
→hold(axes_handle,...) :在句柄指定的坐标轴上设置hold状态。若不存在axes,hold命令会创建一个axes
→ishold:查询hold当前是on还是off,是hold on的话就返回逻辑1
举例(可利用hold on 来对一个对象进行多重修饰):
x = 0.1:0.5:4
y = sqrt(x)
plot(x,y,'r')
axis([-1,5,0,2.5])
hold on
plot(x,y,'bo','markersize',10)
plot(x,y,'b+','markersize',20)
6、 subplot( )
subplot(m,n,p) 将一个绘图窗口分割成 m行n列共m×n 个矩形绘图区域(每个区域有自己的坐标轴)并将第 p 个绘图区域选定为当前的绘图区域。编号从最上边一行开始 ,从左至右、从上至下依次编号。
备注:subplot(1,1,1) 回到默认的模式(整个图形窗口中只用一套坐标轴)。当一个新的subplot命令改变了图形窗口中绘图区域的数目的时候,原先的子图就被擦除掉。
→subplot(m,n,p,'replace') 如果指定的axes已存在,则删除它,创建一个新的axes。
→subplot('Position',[left bottom width height]) 在当前图形窗口指定的Position上画图(创建坐标轴)
→subplot(..., prop1, value1, prop2, value2, ...) 创立坐标系时,同时设置坐标系的相关属性。
→h = subplot(...) 返回坐标系的句柄。
→h = subplot(m,n,p) 返回第p个坐标轴的句柄
→subplot(h) 设置句柄h对应的坐标轴为当前坐标轴。
→subplot(m,n,P) P是一个向量,表示向量P中指定的若干画图区域连成一个整体,包括那些被P跨越的画图区域。
7、图形标注
legend ( )
→legend(string1,string2, ...) 添加图例
title( )
→title('text') 添加标题
xlabel( ) / ylabel( ) / zlabel( )
→xlabel('text') 添加 X 坐标轴标注
→ylabel('text') 添加 Y 坐标轴标注
→zlabel('text') 添加 Z 坐标轴标注
text( )
→text(x,y,string) 在点 (x,y) 处添加文本
→text(x,y,string,'PropertyName',PropertyValue...)
使用TeX / LaTeX
在Matlab的text对象的函数中(函数 title、xlabel、ylabel、zlabel、text、legend),说明文字除使用标准的ASCII字符外,还可使用 TeX / LaTeX 格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。Matlab支持两个层次的 TeX ,通过 text的 Interpreter 属性来设置:
'tex' — 默认设置,支持 TeX 的一个子集
'latex' — 支持 LaTeX
'none' — 不支持
TeX是D.E.Knuth 开发的免费的功能强大的排版系统,是公认的数学公式排得最好的系统。
LaTeX是由L.Lamport编写的一个目前最流行的TeX宏包(宏集、扩展),特别适合数学类论文、书籍的排版,也可以排版普通的文章和书籍。
图12 TeX Character Sequence pic12.jpg
e.g.
title('{\itAe}^{-\alpha\itt}sin\beta{\itt} \alpha<<\beta') xlabel('Time \musec.')
ylabel('Amplitude')
Tex字符的颜色设置
\color{颜色名}颜色名
颜色名有12种,分别为red、green、yellow、magenta、blue、black、white、cyan、gray、barkGreen、orange和lightBlue。例如:\color{magenta}magenta
\color[rgb]{a b c}
设置字体颜色为RGB矩阵[a b c]所表示的颜色。 a、b和c都在[0 1] 范围内。例如:color[rgb]{0 .5 .5} 点击打开链接