本文含有多图,请注意流量消耗!

# 图形对象句柄及属性

# 对象句柄值的获取

句柄引用图形对象的具体实例。使用对象句柄设置和查询对象属性的值。对象的句柄值类似于 C++ 中的引用,将对象的句柄值赋值给变量后,该变量就可以代表指定的绘图对象。

当创建图形对象时,可以将对象的句柄保存在变量中。

e.g.e.g.

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 函数。

e.g.e.g.

获取图像的属性:

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);

其中, mn 指定将图形分成 m*n 个绘图区, p 指定当前活动区。

例如执行 subplot (2,3,3);

即是将一个图像窗口划分为二行三列共 6 个绘图区,将当前要绘制的图像画在第三个绘图区。

e.g.e.g.

在一个图形窗口中绘制四个图像分别为

y=sinxy=cosxy=tanxy=cotxy=sin{x}\\y=cos{x}\\y=tan{x}\\y=cot{x}

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 就相当于选定了某个图像进行编辑。绘图和标注时一定要注意选的是哪个图像。

更新于 阅读次数