MATLAB R2014b图形-第2部分:使用图形对象
今天,大卫·加里森我们的客座博主将在R2014b中继续他关于新图形系统的系列文章。
- 第一部分:新图形系统的特点
- 第2部分:使用图形对象
- 第3部分:新图形系统中的兼容性考虑
下面是本系列的第2部分。
内容
到目前为止我们学到了什么?
在第1部分在本系列中,我在R2014b中介绍了新的MATLAB图形系统。我描述了一些新特性,并提到了R2014b中的一个大变化——图形函数返回MATLAB对象,而不是数字句柄.
MATLAB图形系统
当我使用MATLAB时,我通常不会考虑内部图形系统。通常,我只是想把一些数据可视化。我可能会调用一个MATLAB的绘图函数,比如情节或酒吧来理解我的数据中一些重要的东西。我还使用类似的函数创建用户界面uicontrol或uipanel.这些函数是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帐户或创建一个新帐户。