第七章 MATLAB图形句柄
与第四章的高层绘图指令相比,本章的内容更深入MATLAB可视化功能的内核。编写本章的目的有两个:(1)使读者更深入地理解高层绘图指令,从而可绘制出更精细更生动更个性的图形;(2)使读者能利用低层图形指令和图形对象属性开发专用绘图函数。
本章在内容安排上有如下考虑:
保证概念、结构和方法的完整性:由表及里、由浅入深的原则系统阐述句柄图形体系、图形对象、属性和操作方法。
突出要点、新点和难点:句柄图形体系有11个基本图形对象,每个对象的属性少则20几个,多则近百个。对此,MATLAB自带资料有详尽的文字说明。因此,本章只对最常用的、不可或缺的、以及较难掌握的内容进行说明。
强调“可操作性”体现“范例引导概念”的本书宗旨:针对MATLAB自带资料缺少完整、可操作应用实例的弱点,本章设计了部分算例,读者通过阅读或操作这些范例,可掌握各指令、属性之间的有机配合,从而更具体更真切地理解句柄图形。
第一节图形对象及其句柄
MATLAB语言的句柄绘图可以对图形各基本对象进行更为细腻的修饰,可以产生更为复杂的图形,而且为动态图形的制作奠定了基础。
高层绘图与底层绘图的区别
(1)高层绘图函数—是对整个图形进行操作的,图形每一部分的属性都是按缺省方式设置的,充分体现了MATLAB语言的实用性;
(2)底层绘图函数—可以定制图形,对图形的每一部分进行控制,用户可以用来开发用户界面以及各专业的专用图形。充分体现了MATLAB语言的开发性。
一、图形对象
MATLAB的图形对象包括计算机屏幕、图形窗口、坐标轴、用户菜单、用户控件、曲线、曲面、文字、图像、光源、区域块和方框等。系统将每一个对象按树型结构组织起来。
例:
河流断面面积计算程序(exam7_1.m)。
a=[13.0000,8.7700,8.7700,4.7700,4.2700,4.6700,4.1700,2.9700,1.7700,1.0700,1 .6700,1.6700,2.5700,4.6700,3.9700,14.7000] %河底高程
x=[0,80,190,245,290,330,400,460,535,580,620,665,730,810,860,890] %起点距
Hf_1=figure('NumberTitle','off','name','断面面积计算','Position',[50,80,700,460]) %图形标题
plot(x,a) %绘断面图
set(gca,'Xdir','Normal','Ydir','Normal','Box','off');
s=input('请输入水位值:');
ss=s-a;
sa=length(a)
for i=1:sa;
if ss(i)<0;
sss(i)=0;
else
sss(i)=ss(i);
end
end
Q=trapz(x,sss);
hold on
y=[0:1:890];
aa=['水位',num2str(s),'米'];
plot(y,s,'r-')
title(['所求的断面面积为',num2str(Q),'平方米'],'FontSize',14,'color','red'),
xlabel('起点距(米)')
ylabel('水深(米)')
gtext(aa)
hold off
根:图形对象的根,对应于计算机屏幕,根只有一个,其它所有图形对象都是根的后代。
图形窗口: 根的子代,窗口的数目不限,所有图形窗口都是根屏幕的子代,除根之外,其它对象则是窗的后代。
界面控制:图形窗口的子代,创建用户界面控制对象,使得用户可采用鼠标在图形上作功能选择,并返回句柄。
界面菜单: 图形窗口的子代,创建用户界面菜单对象。
轴:图形窗口的子代,创建轴对象,并返回句柄,线面字块像的父辈。
线:轴的子代,创建线对象。
面:轴的子代,创建块对象。
字:轴的子代,创建字对象。
块:轴的子代,创建块对象。
像:轴的子代,创建图像对象。
二、图形对象句柄
MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。
计算机屏幕作为根对象由系统自动建立,其句柄值为0,而图形窗口对象的句柄值为一正整数,并显示在该窗口的标题栏,其他图形对象的句柄为浮点数。MATLAB提供了若干个函数用于获取已有图形对象的句柄。
(1)句柄图形:利用底层绘图函数,通过对对象属性的设置(Handle Graphics)与操作实现绘图;
(2)句柄图形中所有图形操作都是针对图形对象而言的;
(3)句柄图形充分体现了面向对象的程序设计;
(4)句柄图形可以随意改变MATLAB生成图形的方式;
(5)句柄图形允许你定制图形的许多特性,无论是对图形做一点小改动,还是影响所有图形输出的整体改动;
(6)句柄图形的特性高层绘图函数是无法实现的;
(7)在高层绘图中对图形对象的描述一般是省缺的或由高层绘图函数自动设置的,因此对用户来说几乎是不透明的;
(8)但句柄绘图中上述图形对象都是用户需要经常使用的,所以要作到心中有数,用句柄设置图形对象的属性。
例:(exam7_2.m)
x=0:2*pi/180:2*pi;
y1=sin(2*x);
y2=cos(2*x);
h=plot(x,y1,x,y2)
l=legend('sin','cos')
>> exam7_2
h =
103.0026
3.0059
l =
104.0031
三、创建图形对象的底层函数
1、figure —创建图形窗口
调用格式:
h=figure(n) n为窗口序号。
例:
创建1号窗口,返回句柄。
h=figure(1)
h=
1
返回值为窗口号数
2、uicontrol —图形界面控制
调用格式:
h=uicontrol(‘property’,value)
property/value确定控制类型。
3、uimenu —创建用户界面菜单
调用格式:
h=uimenu(‘property’,value)
property/value 确定菜单形式。
4、axes —创建轴对象
h=axes(‘property’,,value)
定义轴对象的位置与大小。
5、line —创建线对象
h=line(x,y,z)
例:
h=lien(1:6,1:6)
h =
3.0066
创建线对象的同时也建立了一个唯一的句柄变量h是句柄值——符点数。
6、patch—创建块对象
h=patch(x,y,z,c) x,y,z定义多边形,c确定填充颜色。
7、surface —创建面对象
h=surface(x,y,z,c) x,y,z三维曲面坐标,c颜色矩阵。
8、image —显示图象
h=image(x); x为图像矩阵。
9、text —标注文字
h=text(x,y,’string’)
每个底层函数只能创建一个图形对象,并将它们置于适当的父辈对象中。例:①(exam7_3.m)
clf reset;H_mesh=mesh(peaks(20))
H_grand_parent=get(get(H_mesh,'Parent'),'Parent')
disp(' 图柄轴柄'),disp([gcf gca])
H_mesh =
101.0039
H =
1
图柄轴柄
1.0000 100.0033
例:②(exam7_4.m)
clf
reset,t=(0:100)/100*2*pi;H_line=line('Xdata',t,'Ydata',sin(t)) text(pi,0.8,'\fontsize{14}sin(t)')
H_c=get(get(H_line,'parent'),'children')
T=get(H_c,'Type')
H_line =
100.0035
H_c =
102.0061
100.0035
T =
'text'
'line'
第二节图形对象属性
一、属性名与属性值
1、定义
MATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值称为属性值。
2、查阅方法
line([0:10],[0:10])
(1)图形窗口
get(gcf)
Alphamap = [ (1 by 64) double array]
BackingStore = on
CloseRequestFcn = closereq
Color = [0.855388 0.855388 0.855388]
Colormap = [ (64 by 3) double array]
CurrentAxes = [101.006]
CurrentCharacter = -
CurrentObject = []
CurrentPoint = [0 0]
Dithermap = [ (64 by 3) double array]
DithermapMode = manual
DoubleBuffer = off
FileName =
FixedColors = [ (10 by 3) double array]
IntegerHandle = on
InvertHardcopy = on
KeyPressFcn =
MenuBar = figure
MinColormap = [64]
Name =
NextPlot = add
NumberTitle = on
PaperUnits = centimeters
PaperOrientation = portrait
PaperPosition = [0.634517 6.34517 20.3046 15.2284]
PaperPositionMode = manual
PaperSize = [20.984 29.6774]
PaperType = A4
Pointer = arrow
PointerShapeCData = [ (16 by 16) double array] PointerShapeHotSpot = [1 1]
Position = [360 514 560 420]
Renderer = painters
RendererMode = auto
Resize = on
ResizeFcn =
SelectionType = normal
ShareColors = on
Units = pixels
WindowButtonDownFcn =
WindowButtonMotionFcn =
WindowButtonUpFcn =
WindowStyle = normal
BeingDeleted = off
ButtonDownFcn =
Children = [101.006]
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [0]
Selected = off
SelectionHighlight = on
Tag =
Type = figure
UIContextMenu = []
UserData = []
Visible = on
(2)当前轴
get(gca)
ALim = [0 1]
ALimMode = auto
AmbientLightColor = [1 1 1]
Box = off
CameraPosition = [5 5 17.3205]
CameraPositionMode = auto
CameraTarget = [5 5 0]
CameraTargetMode = auto
CameraUpVector = [0 1 0]
CameraUpVectorMode = auto
CameraViewAngle = [6.60861]
CameraViewAngleMode = auto
CLim = [0 1]
CLimMode = auto
Color = [1 1 1]
CurrentPoint = [ (2 by 3) double array] ColorOrder = [ (7 by 3) double array] DataAspectRatio = [5 5 1]
DataAspectRatioMode = auto
DrawMode = normal
FontAngle = normal
FontName = Helvetica
FontSize = [10]
FontUnits = points
FontWeight = normal
GridLineStyle = :
Layer = bottom
LineStyleOrder = -
LineWidth = [0.5]
MinorGridLineStyle = :
NextPlot = replace
PlotBoxAspectRatio = [1 1 1]
PlotBoxAspectRatioMode = auto
Projection = orthographic
Position = [0.13 0.11 0.775 0.815]
TickLength = [0.01 0.025]
TickDir = in
TickDirMode = auto
Title = [102.007]
Units = normalized
View = [0 90]
XColor = [0 0 0]
XDir = normal
XGrid = off
XLabel = [103.005]
XAxisLocation = bottom
XLim = [0 10]
XLimMode = auto
XMinorGrid = off
XMinorTick = off
XScale = linear
XTick = [ (1 by 11) double array]
XTickLabel = [ (11 by 2) char array] XTickLabelMode = auto
XTickMode = auto
YColor = [0 0 0]
YDir = normal
YGrid = off
YLabel = [104.004]
YAxisLocation = left
YLim = [0 10]
YLimMode = auto
YMinorGrid = off
YMinorTick = off
YScale = linear
YTick = [ (1 by 11) double array]
YTickLabel = [ (11 by 2) char array] YTickLabelMode = auto
YTickMode = auto
ZColor = [0 0 0]
ZDir = normal
ZGrid = off
ZLabel = [105.004]
ZLim = [-1 1]
ZLimMode = auto
ZMinorGrid = off
ZMinorTick = off
ZScale = linear
ZTick = [-1 0 1]
ZTickLabel =
ZTickLabelMode = auto
ZTickMode = auto
BeingDeleted = off
ButtonDownFcn =
Children = [3.0083]
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [1]
Selected = off
SelectionHighlight = on
Tag =
Type = axes
UIContextMenu = []
UserData = []
Visible = on
二、属性的操作
1、属性值
(1)窗口属性值
set(gcf)
Alphamap
BackingStore: [ {on} | off ]
CloseRequestFcn: string -or- function handle -or- cell array
Color
Colormap
CurrentAxes
CurrentCharacter
CurrentObject
CurrentPoint
Dithermap
DithermapMode: [ auto | {manual} ]
DoubleBuffer: [ on | {off} ]
FileName
IntegerHandle: [ {on} | off ]
InvertHardcopy: [ {on} | off ]
KeyPressFcn: string -or- function handle -or- cell array
MenuBar: [ none | {figure} ]
MinColormap
Name
NextPlot: [ {add} | replace | replacechildren ]
NumberTitle: [ {on} | off ]
PaperUnits: [ {inches} | centimeters | normalized | points ]
PaperOrientation: [ {portrait} | landscape | rotated ]
PaperPosition
PaperPositionMode: [ auto | {manual} ]
PaperSize
PaperType: [ {usletter} | uslegal | A0 | A1 | A2 | A3 | A4 | A5 | B0 | B1 | B2 | B3 | B4 | B5 | arch-A | arch-B | arch-C | arch-D | arch-E | A | B | C | D | E | tabloid |
Pointer: [ crosshair | fullcrosshair | {arrow} | ibeam | watch | topl | topr | botl | botr | left | top | right | bottom | circle | cross | fleur | custom ] PointerShapeCData
PointerShapeHotSpot
Position
Renderer: [ {painters} | zbuffer | OpenGL ]
RendererMode: [ {auto} | manual ]
Resize: [ {on} | off ]
ResizeFcn: string -or- function handle -or- cell array
SelectionType: [ normal | open | alt | extend ]
ShareColors: [ {on} | off ]
Units: [ inches | centimeters | normalized | points | {pixels} | characters ] WindowButtonDownFcn: string -or- function handle -or- cell array
WindowButtonMotionFcn: string -or- function handle -or- cell array
WindowButtonUpFcn: string -or- function handle -or- cell array
WindowStyle: [ {normal} | modal ]
ButtonDownFcn: string -or- function handle -or- cell array
Children
Clipping: [ {on} | off ]
CreateFcn: string -or- function handle -or- cell array
DeleteFcn: string -or- function handle -or- cell array
BusyAction: [ {queue} | cancel ]
HandleVisibility: [ {on} | callback | off ]
HitTest: [ {on} | off ]
Interruptible: [ {on} | off ]
Parent
Selected: [ on | off ]
SelectionHighlight: [ {on} | off ]
Tag
UIContextMenu
UserData
Visible: [ {on} | off ]
(2)轴属性值
set(gca)
ALim
ALimMode: [ {auto} | manual ]
AmbientLightColor
Box: [ on | {off} ]
CameraPosition
CameraPositionMode: [ {auto} | manual ]
CameraTarget
CameraTargetMode: [ {auto} | manual ]
CameraUpVector
CameraUpVectorMode: [ {auto} | manual ]
CameraViewAngle
CameraViewAngleMode: [ {auto} | manual ]
CLim
CLimMode: [ {auto} | manual ]
Color
ColorOrder
DataAspectRatio
DataAspectRatioMode: [ {auto} | manual ]
DrawMode: [ {normal} | fast ]
FontAngle: [ {normal} | italic | oblique ]
FontName
FontSize
FontUnits: [ inches | centimeters | normalized | {points} | pixels ]
FontWeight: [ light | {normal} | demi | bold ]
GridLineStyle: [ - | -- | {:} | -. | none ]
Layer: [ top | {bottom} ]
LineStyleOrder
LineWidth
MinorGridLineStyle: [ - | -- | {:} | -. | none ]
NextPlot: [ add | {replace} | replacechildren ]
PlotBoxAspectRatio
PlotBoxAspectRatioMode: [ {auto} | manual ]
Projection: [ {orthographic} | perspective ]
Position
TickLength
TickDir: [ {in} | out ]
TickDirMode: [ {auto} | manual ]
Title
Units: [ inches | centimeters | {normalized} | points | pixels | characters ] View
XColor
XDir: [ {normal} | reverse ]
XGrid: [ on | {off} ]
XLabel
XAxisLocation: [ top | {bottom} ]
XLim
XLimMode: [ {auto} | manual ]
XMinorGrid: [ on | {off} ]
XMinorTick: [ on | {off} ]
XScale: [ {linear} | log ]
XTick
XTickLabel
XTickLabelMode: [ {auto} | manual ]
XTickMode: [ {auto} | manual ]
YColor
YDir: [ {normal} | reverse ]
YGrid: [ on | {off} ]
YLabel
YAxisLocation: [ {left} | right ]
YLim
YLimMode: [ {auto} | manual ]
YMinorGrid: [ on | {off} ]
YMinorTick: [ on | {off} ]
YScale: [ {linear} | log ]
YTick
YTickLabel
YTickLabelMode: [ {auto} | manual ]
YTickMode: [ {auto} | manual ]
ZColor
ZDir: [ {normal} | reverse ]
ZGrid: [ on | {off} ]
ZLabel
ZLim
ZLimMode: [ {auto} | manual ]
ZMinorGrid: [ on | {off} ]
ZMinorTick: [ on | {off} ]
ZScale: [ {linear} | log ]
ZTick
ZTickLabel
ZTickLabelMode: [ {auto} | manual ]
ZTickMode: [ {auto} | manual ]
ButtonDownFcn: string -or- function handle -or- cell array
Children
Clipping: [ {on} | off ]
CreateFcn: string -or- function handle -or- cell array
DeleteFcn: string -or- function handle -or- cell array
BusyAction: [ {queue} | cancel ]
HandleVisibility: [ {on} | callback | off ]
HitTest: [ {on} | off ]
Interruptible: [ {on} | off ]
Parent
Selected: [ on | off ]
SelectionHighlight: [ {on} | off ]
Tag
UIContextMenu
UserData
Visible: [ {on} | off ]
2、set函数
set函数的调用格式为:
set(句柄,属性名1,属性值1,属性名2,属性值2,…)
其中句柄用于指明要操作的图形对象。如果在调用set函数时省略全部属性名和属性值,则将显示出句柄所有的允许属性。
set(gcf,'color',[0.5 0.5 0.5])
set(gca,'color',[0.5 0.5 0.5])
3、get函数
get函数的调用格式为:
V=get(句柄,属性名)
其中V是返回的属性值。如果在调用get函数时省略属性名,则将返回句柄所有的属性值。
例:
作正弦、余弦曲线,将正弦曲线改为虚线,将余弦曲线幅度减为1/2高度,如何用句柄实现(exam7_5.m)。
x=0:2*pi/180:2*pi;
y1=sin(x);y2=cos(x);
plot(x,y1,x,y2)
h=get(gcf,'children')
hh=get(gca,'children')
y11=get(hh(2),'ydata');
y22=y11/2;
set(hh(2),'ydata',y22)
set(hh(1),'linestyle',':')
h =
101.0066
hh =
102.0125
3.0103
4、对象属性的继承操作
对象属性的继承操作是通过父代对象,设置省缺对象属性来实现的。
父代句柄属性中设置省缺值后,所有子代对象均可以继承该属性的省缺值。
属性省缺值的描述结构为:
Dfault+对象名称+对象属性
如:
DefaultFigureColor —图形窗口的颜色。
DefaultAxesAspaceRatio —轴的视图比率。
DefaultLineLineWide —线的宽度。
DefaultLineColor —线的颜色。
缺省值的获得与设置也是由get,set函数实现的。
例:
get(0,'DefaultFigureColor') —获得图形窗口的省缺值。
set(gca,'DefaultLineColor','r') —设置线的颜色为红色。
例:
在图上添加文字注释,颜色为红色。
set(gca,'DefaultTextColor',[1 0 0])
gtext('正弦')
gtext('余弦')
在轴对象上设置字对象的颜色省缺值为红色。
继承该省缺值在图上添加红色的文字注释。
例:①(exam7_6.m)
x=0:2*pi/180:2*pi;
y=sin(2*x);
h=line(x,y)
set(0,'DefaultFigureColor',[0.5 0.5 0.5]) %将所有新图形窗口的颜色由省缺值黑色设置为适中的灰色
set(h,'color','m','linewidth',2,'linestyle','*')
set(0,'defaultfigurecolor','b')
set(0,'defaultaxescolor','g')
例:②(exam7_7.m)
h=surf(peaks(30))
set(0,'defaultsurfaceedgecolor','w')
set(gca,'edgecolor','default')
5、其它操作
default —由父代继承。
factory —厂家设定省缺值。
remove —清除设定省缺值。
例:
set(gca,'defaultlinecolor','remove')
set(0,'defaultsurfaceedgecolor','factory')
6、对象的公共属性
对象常用的公共属性:Children属性、Parent属性、Tag属性、Type属性、UserData 属性、Visible属性、ButtonDownFcn属性、CreateFcn属性、DeleteFcn属性。
第三节图形对象的创建
一、图形窗口对象
建立图形窗口对象使用figure函数,其调用格式为:
句柄变量=figure(属性名1,属性值1,属性名2,属性值2,…)
MATLAB通过对属性的操作来改变图形窗口的形式。也可以使用figure函数按MATLAB 缺省的属性值建立图形窗口:
figure 或句柄变量=figure
要关闭图形窗口,使用close函数,其调用格式为:
close(窗口句柄)
另外,close all 命令可以关闭所有的图形窗口,clf命令则是清除当前图形窗口的内容,但不关闭窗口。
MATLAB为每个图形窗口提供了很多属性。这些属性及其取值控制着图形窗口对象。除公共属性外,其他常用属性如下:MenuBar属性、Name属性、NumberTitle属性、Resize 属性、Position属性、Units属性、Color属性、Pointer属性、KeyPressFcn(键盘键按下响应)、WindowButtonDownFcn(鼠标键按下响应)、WindowButtonMotionFcn(鼠标移动响应)及WindowButtonUpFcn(鼠标键释放响应)等。
例
:
建立一个图形窗口。该图形窗口没有图形编号,标题名称为“我的图形窗口”,起始于屏幕[50,50]、宽度和高度分别为700像素点和500像素点。
H_f=figure('NumberTitle','off','name','我的图形窗口','Position',[50,50,700,500])
get(H_f,'position')
ans =
50 50 700 500
二、坐标轴对象
建立坐标轴对象使用axes函数,其调用格式为:
句柄变量=axes(属性名1,属性值1,属性名2,属性值2,…)
调用axes函数用指定的属性在当前图形窗口创建坐标轴,并将其句柄赋给左边的句柄变量。也可以使用axes 函数按MATLAB缺省的属性值在当前图形窗口创建坐标轴:axes 或句柄变量= axes
用axes 函数建立坐标轴之后,还可以调用axes 函数将之设定为当前坐标轴,且坐标轴所在的图形窗口自动成为当前图形窗口:
axes(坐标轴句柄)
MATLAB为每个坐标轴对象提供了很多属性。除公共属性外,其他常用属性如下:Box 属性、GridLineStyle属性、Position属性、Units属性、Title属性等。
例:(exam7_8.m)
t=1:20
plot(t,sin(t))
set(gca,'ytick',[-1 0 0.2 0.4 1])
set(gca,'yticklabel','-1|0|cutoff|0.4|1')
三、曲线对象
建立曲线对象使用line函数,其调用格式为:
句柄变量=line(x,y,z,属性名1,属性值1,属性名2,属性值2,…)
其中对x,y,z的解释与高层曲线函数plot和plot3等一样,其余的解释与前面介绍过的figure和axes函数类似。
每个曲线对象也具有很多属性。除公共属性外,其他常用属性如下:Color属性、LineStyle属性、LineWidth属性、Marker属性、MarkerSize属性等。
例:(exam7_9.m)
x=[-2:0.01:2]*pi;
y=sin(x);
H_sin=line(x,y)
set(H_sin,’color’,[1 .5 0],’linewidth’,3);
例:(exam7_10.m)
z=cos(x);
hold on
H_cos=line(x,z);
set(H_cos,’color’,[0.75 0 1])
hold off
title(‘sin和cos函数曲线’,‘fontsize’,16,’color’,’green’)
四、文字对象
使用text函数可以根据指定位置和属性值添加文字说明,并保存句柄。该函数的调用格式为:
句柄变量=text(x,y,z,'说明文字',属性名1,属性值1,属性名2,属性值2,…) 其中说明文字中除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符。
除公共属性外,文字对象的其他常用属性如下:Color属性、String属性、Interpreter 属性、FontSize属性、Rotation属性。
例:(exam7_11.m)
t=0:0.1:3*pi
alpha=0:0.1:3*pi
plot(t,sin(t),'r-');hold on
plot(alpha,3*exp(-0.5*alpha),'b:')
xlabel('t(deg)')
ylabel('magnitude')
title('\it{sine wave and {itAe}^{-\alpha{\itt}}wav from zero to 3\pi}');
text(6,sin(6),['\fontname{times}Value=',num2str(sin(6)),' at {\itt}=6\rightarrow\bullet'],'HorizontalAlignment','right')
text(2,3*exp(-0.5*2),['\bullet\leftarrow\fontname{times} The {\it3e}^{-0.5\itt} at {\itt}=2'],'HorizontalAlignment','left');
legend('sin(t)','{\itAe}^{-\alphat}');
五、曲面对象
建立曲面对象使用surface函数,其调用格式为:
句柄变量=surface(x,y,z,属性名1,属性值1,属性名2,属性值2,…)
其中对x,y,z的解释与高层曲面函数mesh和surf等一样,其余的解释与前面介绍过的figure和axes等函数类似。
每个曲面对象也具有很多属性。除公共属性外,其他常用属性如下:EdgeColor属性、FaceColor属性、LineStyle属性、LineWidth属性、Marker属性、MarkerSize属性等。
例:
制作个性化双坐标系:制作一个双坐标系用来表现高压和低温两个不同量的过渡过程(exam7_12.m)。
tp=(0:100)/100*5;yp=8+4*(1-exp(-0.8*tp).*cos(3*tp));
tt=(0:500)/500*40;yt=120+40*(1-exp(-0.05*tt).*cos(tt));
clf reset,h_ap=axes('Position',[0.13,0.13,0.7,0.75]);
set(h_ap,'Xcolor','b','Ycolor','b','Xlim',[0,5],'Ylim',[0,15]) ; %使纵坐标轴以0为下限。
nx=10;ny=6; %保证两套坐标轴刻度位置一致的技术。
pxtick=0:((5-0)/nx):5;pytick=0:((15-0)/ny):15; %保证两套坐标轴刻度位置一致的技术。
set(h_ap,'Xtick',pxtick,'Ytick',pytick,'Xgrid','on','Ygrid','o n') %绘制分格线。
h_linet=line(tp,yp,'Color','b'); %保证两套坐标轴刻度位置一致的技术。
set(get(h_ap,'Xlabel'),'String','时间 \rightarrow (分)')
set(get(h_ap,'Ylabel'),'String','压力 \rightarrow(\times10 ^{5} Pa )')
h_at=axes('Position',get(h_ap,'Position')); %保证两套坐标的轴位框重合的技巧
set(h_at,'Color','none','Xcolor','r','Ycolor','r'); %保证重合坐标系图形都可看的技术,设置'Color'的属性值为'none'是必须的。
set(h_at,'Xaxislocation','top') %保证两套坐标轴刻度位置一致的技术。
set(h_at,'Yaxislocation','right','Ydir','rev')
set(get(h_at,'Xlabel'),'String','\fontsize{15}\fontname{隶书}时间 \rightarrow (分)')
set(get(h_at,'Ylabel'),'String',' ( {\circ}C )\fontsize{15} \leftarrow \fontname{隶书}零下温度')
set(h_at,'Ylim',[0,210]) %使纵坐标轴以0为下限。
line(tt,yt,'Color','r','Parent',h_at) %保证温度曲线被绘制在h_at坐标系中。
xpm=get(h_at,'Xlim'); %获取h_at坐标系横轴的取值范围。
txtick=xpm(1):((xpm(2)-xpm(1))/nx):xpm(2); %保证两套坐标轴刻度位置一致的技术。
tytick=0:((210-0)/ny):210; %保证两套坐标轴刻度位置一致的技术。
set(h_at,'Xtick',txtick,'Ytick',tytick) %保证两套坐标轴刻度位置一致的技术。
句柄式图形常用函数: (1)get(h)返回句柄值h所指定的图形对象的所有属性名称与相对应的属性值 (2)a = get(h)返回由句柄值h所指定的图形对象的属性结构数组,并且该数组的字段名称就是该对象的属性名称。 (3)a = get(0,'factory')返回所有能由用户设置的属性的默认定义值。 (4)a = get(0,'FactoryObjectTypePropertyName1', 'FactoryObjectTypePropertyName2',...)返回指定对象类型指定的属性值,输入参数FactoryObjectTypePropertyName为一个关键词,由字符Factory与图形对象类型(如Figure)还有属性名称(如Color)组成。 a = get(0,'factoryFigureColor')返回Figure对象的Color属性值。 (5)a = get(h,'DefaultObjectTypePropertyName1', 'DefaultObjectTypePropertyName1',...) 返回句柄值为h的对象指定属性的默认值。如“DefaultFigureColor”。 (6)a = get(h,'default')列出h对象的所有属性的默认属性值 (7)a = set(h)返回句柄值h所指定的图形对象的所有属性名称对应的可设置属性值,a为结构数组,存储对象的属性名称,其字段值为相对应的属性值。属性值中用{}括起来的表示默认值。 (8)set(h,a)使用指定的属性值来设置由句柄值h所指定的对象属性,a为结构数组,其字段名称为对象的属性名称,字段值为相对应的属性值。 (9)a = set(0,'factory')返回那些用户可以设置默认值的所有对象的属性,同时显示可设置的属性值。 (10)a=set(0,'FactoryObjectTypePropertyName')返回所有对象中指定的属性名称FactoryObjectTypePropertyName的所有可能的属性值。 (11)a = set(h,'属性名','属性值')设置句柄值为h的对象的与属性名对应的属性值。 (12) set(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName2',...)对句柄值为h的对象设置特定属性名称的属性默认值。 (13)H = findobj;返回Root对象与其所有子对象的句柄值 (14)H = findobj(h);返回h变量的句柄值 (15)H = findobj(?属性名称…,?属性值…);依据对象的属性名称和属性值找出匹配的对象句柄值。 (16)H = findobj(ObjectHandles,?属性名称…,?属性值…);根据限定的对象列表找出与对象的属性名称和属性值匹配的对象句柄值 (17)gcf返回当前Figure对象的句柄值 gca返回当前axes对象的句柄值 gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab会把当前图形对象的句柄值存放在Figure的CurrentObject属性中Figure对象的属性篇
matlab图形句柄属性 句柄式图形常用函数: (1)get(h)返回句柄值h所指定的图形对象的所有属性名称与相对应的属性值 (2)a = get(h)返回由句柄值h所指定的图形对象的属性结构数组,并且该数组的字段名称就是该对象的属性名称。 (3)a = get(0,'factory')返回所有能由用户设置的属性的默认定义值。 (4)a = get(0,'FactoryObjectTypePropertyName1','FactoryObjectTypePropertyName2',...) 返回指定对象类型指定的属性值,输入参数FactoryObjectTypePropertyName为一个关键词,由字符Factory与图形对象类型(如Figure)还有属性名称(如Color)组成。 a = get(0,'factoryFigureColor')返回Figure对象的Color属性值。 (5)a = get(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName1',...) 返回句柄值为h的对象指定属性的默认值。如“DefaultFigureColor”。 (6)a = get(h,'default')列出h对象的所有属性的默认属性值 (7)a = set(h)返回句柄值h所指定的图形对象的所有属性名称对应的可设置属性值,a为结构数组,存储对象的属性名称,其字段值为相对应的属性值。属性值中用{}括起来的表示默认值。 (8)set(h,a)使用指定的属性值来设置由句柄值h所指定的对象属性,a为结构数组,其字段名称为对象的属性名称,字段值为相对应的属性值。 (9)a = set(0,'factory')返回那些用户可以设置默认值的所有对象的属性,同时显示可设置的属性值。 (10)a=set(0,'FactoryObjectTypePropertyName')返回所有对象中指定的属性名称FactoryObjectTypePropertyName的所有可能的属性值。 (11)a = set(h,'属性名','属性值')设置句柄值为h的对象的与属性名对应的属性值。(12)set(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName2',...) 对句柄值为h的对象设置特定属性名称的属性默认值。 (13)H = findobj;返回Root对象与其所有子对象的句柄值 (14)H = findobj(h);返回h变量的句柄值 (15)H = findobj(’属性名称‘,’属性值‘);依据对象的属性名称和属性值找出匹配的对象句柄值。 (16)H = findobj(ObjectHandles,’属性名称‘,’属性值‘);根据限定的对象列表找出与对象的属性名称和属性值匹配的对象句柄值 (17)gcf返回当前Figure对象的句柄值 gca返回当前axes对象的句柄值 gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab 会把当前图形对象的句柄值存放在Figure的CurrentObject属性中。 Figure 对象是指屏幕(root对象)中产生的窗口,并且MATLAB允许用Figure 函数建立任意数目的窗口,但所有的绘图函数,如plot surf等,如果窗口未存在时,会自动建立一个新的窗口;每个窗口则构成一个Figure 对象。
句柄图形对象
(1) function my_plot x=1:10 y=peaks(10) %Z = peaks(n);returns an n-by-n matrix. cax=newplot %newplot prepares a figure and axes for subsequent graphics commands. %h = newplot prepares a figure and axes for subsequent graphics commands and returns a handle to the current axes. LSO=['- ';'--';': ';'-.'] %此处第一项与第三项要加空格,使得各行元素相等 set(cax,'FontName','Times','FontAngle','italic') %设置图形坐标轴的字体与字体倾斜角度 set(get(cax,'Parent'),'MenuBar','none')%关闭工具栏 line_handles=line(x,y,'Color','b') %将10条曲线利用直线全部画出,并返回直线句柄向量,10条曲线对应10个句柄值 %所以该句柄向量一共有10个元素 style=1 for i=1:length(line_handles) if style>length(LSO)
style=1 end set(line_handles(i),'LineStyle',LSO(style,:)) %设置直线属性 style=style+1 end grid on
第七章 MATLAB图形句柄 与第四章的高层绘图指令相比,本章的内容更深入MATLAB可视化功能的内核。编写本章的目的有两个:(1)使读者更深入地理解高层绘图指令,从而可绘制出更精细更生动更个性的图形;(2)使读者能利用低层图形指令和图形对象属性开发专用绘图函数。 本章在内容安排上有如下考虑: 保证概念、结构和方法的完整性:由表及里、由浅入深的原则系统阐述句柄图形体系、图形对象、属性和操作方法。 突出要点、新点和难点:句柄图形体系有11个基本图形对象,每个对象的属性少则20几个,多则近百个。对此,MATLAB自带资料有详尽的文字说明。因此,本章只对最常用的、不可或缺的、以及较难掌握的内容进行说明。 强调“可操作性”体现“范例引导概念”的本书宗旨:针对MATLAB自带资料缺少完整、可操作应用实例的弱点,本章设计了部分算例,读者通过阅读或操作这些范例,可掌握各指令、属性之间的有机配合,从而更具体更真切地理解句柄图形。 第一节图形对象及其句柄 MATLAB语言的句柄绘图可以对图形各基本对象进行更为细腻的修饰,可以产生更为复杂的图形,而且为动态图形的制作奠定了基础。 高层绘图与底层绘图的区别 (1)高层绘图函数—是对整个图形进行操作的,图形每一部分的属性都是按缺省方式设置的,充分体现了MATLAB语言的实用性; (2)底层绘图函数—可以定制图形,对图形的每一部分进行控制,用户可以用来开发用户界面以及各专业的专用图形。充分体现了MATLAB语言的开发性。 一、图形对象 MATLAB的图形对象包括计算机屏幕、图形窗口、坐标轴、用户菜单、用户控件、曲线、曲面、文字、图像、光源、区域块和方框等。系统将每一个对象按树型结构组织起来。 例: 河流断面面积计算程序(exam7_1.m)。 a=[13.0000,8.7700,8.7700,4.7700,4.2700,4.6700,4.1700,2.9700,1.7700,1.0700,1 .6700,1.6700,2.5700,4.6700,3.9700,14.7000] %河底高程 x=[0,80,190,245,290,330,400,460,535,580,620,665,730,810,860,890] %起点距 Hf_1=figure('NumberTitle','off','name','断面面积计算','Position',[50,80,700,460]) %图形标题 plot(x,a) %绘断面图 set(gca,'Xdir','Normal','Ydir','Normal','Box','off'); s=input('请输入水位值:'); ss=s-a; sa=length(a) for i=1:sa; if ss(i)<0; sss(i)=0; else sss(i)=ss(i); end
第10章 MATLAB图形对象句柄 习题10 一、选择题 1.MA TLAB图形系统的根对象是指()。A A.计算机屏幕B.图形窗口 C.坐标轴D.用户界面对象 2.以下不正确的选项是()。D A.坐标轴是图形窗口对象的子对象 B.图形对象的句柄变量相当于对象名 C.可以通过对象的句柄来设置或获取对象的属性 D.gcf函数可以获取当前对象的句柄 3.使用figure 函数建立图形窗口时,默认的标题是()。C A.图形窗口n(n是数字)B.Fig n(n是数字) C.Figure n(n是数字)D.Figure Window n(n是数字) 4.用于决定坐标轴对象是否带边框的属性是()。A A.Box B.Grid C.Position D.Font 5.下列命令中,除一条命令外其他三条命令等价,这一条命令是()。B A.line(x,y,'Color','r'); B.line(x,y,'r'); C.plot(x,y,'Color','r'); D.plot(x,y,'r'); 6.命令patch([0,1/2,1], [0,tan(pi/3)/2,0], [1,0,0])执行后得到的图形是()。C A.红色的等腰三角形B.绿色的等腰三角形 C.红色的等边三角形D.白色的四边形 二、填空题 1.H代表一根曲线,要设置曲线的属性可以使用函数,要获取曲线的属性可以使用函数。set(H,属性名,属性值),get(H,属性名) 2.MA TLAB中表示颜色可以用表示,也可以用表示。 字符,RGB三元组 3.用于标识图形对象的属性是属性,可以通过函数获取该属性所对应图形对象的句柄。在屏幕对象及其子对象中查找标识符为ppp的对象,并返回其句柄,可使用命令。Tag,findobj,hf=findobj(0,'Tag','ppp') 4.使用axes 函数可以在中创建对象。当前图形窗口,坐标轴 5.下列命令执行后得到的图形是。要绘制圆,则需要将该图形的属性设置为1。正方形,Curvature
matlab 句柄学习 句柄式图形常用函数: (1)get(h)返回句柄值h所指定的图形对象的所有属性名称与相对应的属性值 (2)a = get(h)返回由句柄值h所指定的图形对象的属性结构数组,并且该数组的字段名称就是该对象的属性名称。 (3)a = get(0,'factory')返回所有能由用户设置的属性的默认定义值。 (4)a = get(0,'FactoryObjectTypePropertyName1','FactoryObjectTypePropertyName2',...)返回指定对象类型指定的属性值,输入参数FactoryObjectTypePropertyName为一个关键词,由字符Factory与图形对象类型(如Figure)还有属性名称(如Color)组成。 a = get(0,'factoryFigureColor')返回Figure对象的Color属性值。 (5)a = get(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName1',...)返回句柄值为h的对象指定属性的默认值。如“DefaultFigureColor”。 (6)a = get(h,'default')列出h对象的所有属性的默认属性值 (7)a = set(h)返回句柄值h所指定的图形对象的所有属性名称对应的可设置属性值,a为结构数组,存储对象的属性名称,其字段值为相对应的属性值。属性值中用{}括起来的表示默认值。 (8)set(h,a)使用指定的属性值来设置由句柄值h所指定的对象属性,a为结构数组,其字段名称为对象的属性名称,字段值为相对应的属性值。 (9)a = set(0,'factory')返回那些用户可以设置默认值的所有对象的属性,同时显示可设置的属性值。 (10)a=set(0,'FactoryObjectTypePropertyName')返回所有对象中指定的属性名称FactoryObjectTypePropertyName的所有可能的属性值。 (11)a = set(h,'属性名','属性值')设置句柄值为h的对象的与属性名对应的属性值。 (12)set(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName2',...)对句柄值为h的对象设置特定属性名称的属性默认值。 (13)H = findobj;返回Root对象与其所有子对象的句柄值 (14)H = findobj(h);返回h变量的句柄值 (15)H = findobj(?属性名称…,?属性值…);依据对象的属性名称和属性值找出匹配的对象句柄值。 (16)H = findobj(ObjectHandles,?属性名称…,?属性值…);根据限定的对象列表找出与对象的属性名称和属性值匹配的对象句柄值 (17)gcf返回当前Figure对象的句柄值 gca返回当前axes对象的句柄值 gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab 会把当前图形对象的句柄值存放在Figure的CurrentObject属性中 Figure对象的属性篇 (1).^是矩阵每个元素的幂乘,^是数的幂乘。 (2)set(handle)列出句柄值为handle的对象的所有属性 get(handle)除列出上述属性外,还列出可以设置的属性 reset(handle)将所有属性改为默认值 delete(handle)删除句柄值为handle的图形对象 (3)利用set(handle,…属性名称?)获得句柄值为handle的对象的属性名称下所有可设置的属性值