罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已存档,不会更新。

MATLAB R2014b图形-第2部分:使用图形对象

今天,大卫·加里森我们的客座博主将在R2014b中继续他关于新图形系统的系列文章。

  • 第一部分:新图形系统的特点
  • 第2部分:使用图形对象
  • 第3部分:新图形系统中的兼容性考虑

下面是本系列的第2部分。

内容

到目前为止我们学到了什么?

第1部分在本系列中,我在R2014b中介绍了新的MATLAB图形系统。我描述了一些新特性,并提到了R2014b中的一个大变化——图形函数返回MATLAB对象,而不是数字句柄

MATLAB图形系统

当我使用MATLAB时,我通常不会考虑内部图形系统。通常,我只是想把一些数据可视化。我可能会调用一个MATLAB的绘图函数,比如情节酒吧来理解我的数据中一些重要的东西。我还使用类似的函数创建用户界面uicontroluipanel.这些函数是MATLAB图形系统的一部分。

假设我在画一张图我想让图中的直线是红色的。我有两种方法。我可以调用情节函数带有一些像这样的额外参数。

X = 0:0.1:10;Y = sinx;情节(x, y,“颜色”“红色”

的输出参数情节命令修改我的情节后,我已经创建了它。在这里,我首先创建了情节,然后使用命令更改线条的颜色。

P = plot(x,y);集(p,“颜色”“红色”

Pre-R2014b数字句柄

在R2014b之前,调用图形函数将返回如下所示的数字

P = plot(x,y)
P = 174.346

变量的值p有一种特殊的数字叫做a吗处理.句柄是对图形对象的引用。对象本身对用户不可用,但您可以使用句柄来检索或更改对象的属性而且得到命令。在上面的例子中,我们使用line对象的句柄来设置它的颜色。事实上,当这种能力第一次在MATLAB中出现时,这种方法是如此的新颖和有用,它被赋予了一个特殊的名字——处理图形

所有图形句柄都是数值。对于数字,这些值是整数,对于其他所有值都是分数值。你可以在任何需要数字的地方使用句柄。我见过MATLAB代码,其中人们将句柄与其他数据存储在双数组中,或者在函数中使用句柄,其中期望将数字作为参数(例如数学函数)。

您可能知道,图形对象存储为具有父级和子级的树结构。在树的顶部有一个特殊的对象叫做图形根.在R2014b之前,图形根的句柄总是0.例如,要获得所有打开图形的列表,您可以输入:

myFigures = get(0,“孩子”);

图形对象

在R2014b中,图形函数不再返回数字句柄。它们现在返回MATLAB对象。现在,当你调用一个带有输出参数的图形函数时,你会看到这样的东西:

P = plot(x,y)
p = Line with properties: Color: [0 0.4470 0.7410] LineStyle: '-' LineWidth: 0.5000 Marker: 'none' MarkerSize: 6 markkerfacecolor: 'none' XData: [1x101 double] YData: [1x101 double] ZData: [1x0 double]使用GET显示所有属性

情节函数现在返回对象。那个线对象有属性。当MATLAB在命令窗口中显示行对象时,它会显示对象的最常见属性。的所有属性文本是一个超链接,您可以单击它查看对象的所有属性。

如果你使用函数查看有关的更多信息p,你会看到这样的东西:

p
名称大小字节类属性p 1x1 112 matlab.graphics.chart.primitiv . line

中的列。输出指示if是什么类型的对象。您在这里看到的是对象的完整类名。不要太担心类名的细节。你们大多数人永远都不会用到它。

在R2014b中使用大的函数引用图形根。

大的
ans = Graphics Root with properties: CurrentFigure: [1x1 Figure] ScreenPixelsPerInch: 96 ScreenSize: [1 1 1920 1200] MonitorPositions:[1 1 1920 1200]单位:'pixels'使用GET显示所有属性

获取和设置对象属性

拥有图形对象的好处之一是,您现在可以使用点表示法获取和设置它们的值。点表示法有这种形式对象。财产.它与要引用结构的字段时使用的语法相同。例如,在R2014b中,你可以像这样得到上面这条线的颜色:

p.Color
Ans = 0 0.4470 0.7410

类似地,您可以使用点表示法设置行的线宽。

p.LineWidth = 2;

如果您想将两个对象的属性设置为相同,点表示法也很有用。在R2014b之前,您可能会编写如下代码:

集(p2,“颜色”得到(p1,“颜色”))

对于点表示法,你可以做同样的事情

p2。Color = p1.Color;

使用点表示法,当您试图访问图形对象属性时,还可以使用制表符完成。

你仍然可以使用而且得到函数,但我发现点表示法是一种更方便的方法来引用对象属性。不过,有一点需要注意。使用点表示法时,必须使用属性名称的正确大写。例如,

p.LineWidth

将返回线宽的值,但是

p.linewidth

将导致错误。

使用而且得到

如上所述,您仍然可以使用而且得到函数,有些情况下而且得到是有用的。

您可以使用得到命令可以了解图形对象的所有属性。属性时看到的属性列表与此相同所有属性链接在上面的例子中。

得到(p)
AlignVertexCenters: 'off'注释:[1x1 matlab.graphics.eventdata.]注释]BeingDeleted: 'off' BusyAction: 'queue' ButtonDownFcn: " Children: [] Clipping: 'on' Color: [0 0.4470 0.7410] CreateFcn: " DeleteFcn: " DisplayName: " HandleVisibility: 'on' HitTest: 'on' Interruptible: 'on' LineStyle: '-' LineWidth: 2 Marker: 'none' MarkerEdgeColor: 'auto' markfacecolor: 'none' MarkerSize: 6 Parent: [1x1 Axes] PickableParts: 'visible' Selected: 'off' SelectionHighlight: 'on' Tag: " Type: 'line' UIContextMenu: [] UserData: [] visible: 'on' XData: "[1x101 double] XDataMode: 'manual' XDataSource: " YData: [1x101 double] YDataSource: " ZData: [1x0 double] ZDataSource: "

如果您想知道给定属性有哪些可用选项,则函数很有用。在这种情况下你可以打电话使用属性名,但没有属性值。

集(p,“线型”
'-' '——' ':' '-。' '没有'

另一种用法当需要从图形对象数组引用属性时发生。方法创建的行对象数组情节命令:

X = 0:0.1:10;Y1 = sinx;Y2 = cosx;线性射线= plot(x,y1,x,y2)
lineArray = 2x1直线数组:直线

您可以使用函数在一个命令中更改数组中所有行的颜色。

集(lineArray,“颜色”“蓝”

你们在R2014b中开始使用图形对象了吗?

你怎么看R2014b中图形对象的改变?您是否尝试过使用点表示法来获取和设置图形对象属性?

接下来——第3部分:新图形系统中的兼容性考虑

R2014b中还有一些其他的变化会影响一些现有的MATLAB代码。这些变化主要影响高级图形用户和构建更复杂用户界面的人。下次,我将描述重要的更改以及您应该采取哪些步骤来使您的代码与R2014b兼容。我还将为您提供一些关于如何编写适用于多个发行版的代码的指导。

发布与MATLAB®R2014b


  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。

Baidu
map