本文含有多图,请注意流量消耗!
# 图形对象句柄及属性
# 对象句柄值的获取
句柄引用图形对象的具体实例。使用对象句柄设置和查询对象属性的值。对象的句柄值类似于 C++ 中的引用,将对象的句柄值赋值给变量后,该变量就可以代表指定的绘图对象。
当创建图形对象时,可以将对象的句柄保存在变量中。
x=linspace(1,10); | |
y=x.^2; | |
h=plot(x,y); |
上述代码中的变量 h
即为一个图形句柄。
不仅是图像,图像的说明也可以用一个句柄来指向。例如为上例的(5,25)这一点加一个说明:
x=linspace(1,10); | |
y=x.^2; | |
h=plot(x,y); | |
h1=text(5,25,"说明"); |
运行结果:
通过句柄 h1
修改这个说明的字号:
x=linspace(1,10); | |
y=x.^2; | |
h=plot(x,y); | |
h1=text(5,25,"说明"); | |
h1.FontSize=18; |
可以看到 “说明” 二字字号被改变:
这也说明了 MATLAB 中的图像和部分变量跟其他编程语言中 结构体变量
或者 由类实例化的对象
很相似,具有它的 “成员”,通过 .
来访问 “成员”。
*** 句柄变量是对象。*** 不要尝试将句柄对象转换为数值,字符或其他类型,也不要执行上述几种类型对应的操作,如:
- 对句柄执行算术运算
- 在逻辑语句中直接使用句柄而不转换为逻辑值
- 在逻辑语句中根据图窗句柄的数值(整数)做判断。
- 将句柄与数字数组中的数据合并。
- 将句柄转换为字符向量,或在字符向量运算中使用句柄。
# 对象属性的获取与设置。
获取某个对象的属性: get
函数。
设置某个对象的属性: set
函数。
获取图像的属性:
x=linspace(0,2*pi,100); | |
y=sin(x); | |
h=plot(x,y); | |
disp(get(h)); |
绘图如下所示:
命令行窗口输出:
XData: [0 0.0635 0.1269 0.1904 … ] (1×100 double)
XDataMode: 'manual'
XVariable: ''
YData: [0 0.0634 0.1266 0.1893 … ] (1×100 double)
YDataMode: 'manual'
YVariable: ''
ZData: [1×0 double]
ZDataMode: 'auto'
ZVariable: ''
XDataSource: ''
YDataSource: ''
ZDataSource: ''
Color: [0 0.4470 0.7410]
ColorMode: 'auto'
LineStyle: '-'
LineStyleMode: 'auto'
LineWidth: 0.5000
Marker: 'none'
MarkerMode: 'auto'
MarkerSize: 6
MarkerEdgeColor: 'auto'
MarkerFaceColor: 'none'
Clipping: on
MarkerIndices: [1 2 3 4 5 6 7 8 9 10 11 12 … ] (1×100 uint64)
AlignVertexCenters: off
LineJoin: 'round'
Children: [0×0 GraphicsPlaceholder]
Parent: [1×1 Axes]
Visible: on
HandleVisibility: 'on'
ButtonDownFcn: ''
ContextMenu: [0×0 GraphicsPlaceholder]
BusyAction: 'queue'
BeingDeleted: off
Interruptible: on
CreateFcn: ''
DeleteFcn: ''
Type: 'line'
Tag: ''
UserData: []
Selected: off
SelectionHighlight: on
HitTest: on
PickableParts: 'visible'
DisplayName: ''
Annotation: [1×1 matlab.graphics.eventdata.Annotation]
SeriesIndex: 1
DataTipTemplate: [1×1 matlab.graphics.datatip.DataTipTemplate]
SourceTable: [0×0 table]
AffectAutoLimits: on
这样就获取到了这个对象的所有属性的详细信息。
知道了该对象有哪些属性,我们就可以对这些属性进行更改,使用 set
函数。
例如我们修改上例所绘制图像的颜色。
x=linspace(0,2*pi,100); | |
y=sin(x); | |
h=plot(x,y); | |
disp(get(h)); | |
set(h,Color='red'); |
图像变为:
# 图形窗口的分割
子图:在同一图形窗口中不同坐标系下的图形为子图。
可以理解为将多个窗口放置在同一个图像窗口中。
subplot
函数:subplot (m,n,p);
其中, m
和 n
指定将图形分成 m*n
个绘图区, p
指定当前活动区。
例如执行 subplot (2,3,3);
即是将一个图像窗口划分为二行三列共 6 个绘图区,将当前要绘制的图像画在第三个绘图区。
在一个图形窗口中绘制四个图像分别为
x=linspace(0,2*pi,100); | |
subplot(2,2,1); | |
plot(x,sin(x)); | |
subplot(2,2,2); | |
plot(x,cos(x)); | |
subplot(2,2,3); | |
plot(x,tan(x)); | |
subplot(2,2,4); | |
plot(x,cot(x)); |
运行结果:
当然我们还可以对每个子图添加标注,或者更改其他属性。这里我们为上例中四个图像添加标题:
x=linspace(0,2*pi,100); | |
subplot(2,2,1); | |
plot(x,sin(x)); | |
title("y=sin{x}"); | |
subplot(2,2,2); | |
plot(x,cos(x)); | |
title("y=cos{x}"); | |
subplot(2,2,3); | |
plot(x,tan(x)); | |
title("y=tan{x}"); | |
subplot(2,2,4); | |
plot(x,cot(x)); | |
title("y=cot{x}"); |
运行结果:
subplot 就相当于选定了某个图像进行编辑。绘图和标注时一定要注意选的是哪个图像。