matlab.graphics.chartcontainer.ChartContainer 类
命名空间: matlab.graphics.chartcontainer
用于开发图对象的基类
描述
matlab.graphics.chartcontainer.ChartContainer
是用于定义您自己的图对象类的类。定义此基类的子类时,可以使用 ChartContainer
属性和方法来构建图对象。在您的类定义文件的第一行指定以下语法以直接从 ChartContainer
类继承,其中 MyChart
是您的对象的名称:
classdef MyChart < matlab.graphics.chartcontainer.ChartContainer
matlab.graphics.chartcontainer.ChartContainer
类是一个 handle
类。
属性
InnerPosition
— 图的大小和位置,不包括边距
[left bottom width height]
图的大小和位置,不包括轴标签和刻度线等装饰元素的边距。以 [left bottom width height]
形式的向量指定此属性。值采用 Units
属性指定的单位。
left
- 父容器的左边缘与不包含边距的图的内部左边缘之间的距离。通常,父容器是图窗、面板或选项卡。bottom
- 父容器的底边缘与不包含边距的图的内底边缘之间的距离。width
- 图的宽度,不包括边距。height
- 图的高度,不包括边距。
注意
当图的父级是 TiledChartLayout
时,设置此属性不起作用。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
NonCopyable | true |
OuterPosition
— 图的大小和位置,包括边距
[left bottom width height]
图的大小和位置,包括轴标签和刻度线等装饰元素的边距。以 [left bottom width height]
形式的向量指定此属性。值采用 Units
属性指定的单位。
left
- 父容器的左边缘与包含边距的图的外部左边缘之间的距离。通常,父容器是图窗、面板或选项卡。bottom
- 父容器的底边缘与包含边距的图的外底边缘之间的距离。width
- 图的宽度,包括边距。height
- 图的高度,包括边距。
注意
当图的父级是 TiledChartLayout
时,设置此属性不起作用。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
NonCopyable | true |
Position
— 图的大小和位置,不包括边距
[left bottom width height]
图的大小和位置,不包括轴标签和刻度线等装饰元素的边距。以 [left bottom width height]
形式的向量指定此属性。此属性等同于 InnerPosition
属性。
注意
当图的父级是 TiledChartLayout
时,设置此属性不起作用。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
NonCopyable | true |
PositionConstraint
— 保持不变的位置
'outerposition'
| 'innerposition'
在增加、删除或更改装饰元素时保持不变的位置属性,指定为下列值之一:
'outerposition'
- 在添加、删除或更改装饰元素(例如标题或轴标签)时,OuterPosition
属性保持不变。如需任何位置调整,MATLAB® 会调整InnerPosition
属性。'innerposition'
- 在添加、删除或更改装饰元素(例如标题或轴标签)时,InnerPosition
属性保持不变。如需任何位置调整,MATLAB 会调整OuterPosition
属性。
注意
当父容器为 TiledChartLayout
对象时,设置此属性不起作用。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
NonCopyable | true |
Units
— 位置单位
'normalized'
(默认) | 'inches'
| 'centimeters'
| 'characters'
| 'points'
| 'pixels'
位置单位,指定为下表中的值之一。要以特定单位更改图的位置,请在指定 Position
属性之前设置 Units
属性。如果您在单个命令中指定 Units
和 Position
属性(使用名称-值对组),请务必在 Position
之前指定 Units
。
Units | 描述 |
---|---|
'normalized' (默认值) | 根据父容器进行归一化,父容器通常是图窗、面板或选项卡。容器的左下角对应到 (0,0) ,右上角对应到 (1,1) 。 |
'inches' | 英寸。 |
'centimeters' | 厘米。 |
'characters' | 基于图形根对象的默认字体:
|
'points' | 字体磅数。一磅等于 1/72 英寸。 |
'pixels' | 以像素为单位的距离不依赖 Windows® 和 Macintosh 系统上的系统分辨率:
在 Linux® 系统上,一个像素的大小由系统分辨率确定。 |
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
NonCopyable | true |
Layout
— 布局选项
空 LayoutOptions
数组 (默认) | TiledChartLayoutOptions
布局选项,指定为 TiledChartLayoutOptions
对象。此属性指定当图的实例是分块图布局的子级时的选项。如果此实例不是分块图布局的子级(例如,它是图窗或面板的子级),则此属性为空且不起作用。否则,您可以通过设置 TiledChartLayoutOptions
对象的 Tile
和 TileSpan
属性,在布局内定位图。
例如,以下代码将图对象 c
放入分块图布局的第三个图块中。
c.Layout.Tile = 3;
要使图占据多个图块,请将 TileSpan
属性指定为二元素向量。例如,此图占据了 2
行和 3
列的图块。
c.Layout.TileSpan = [2 3];
注意
getAxes
方法返回的坐标区不支持分块图布局。在这种情况下,您可以将图的实例放入分块图布局中。
属性:
GetAccess | public |
SetAccess | public |
Visible
— 可见性状态
'on'
(默认) | on/off 逻辑值
可见性状态,指定为 'on'
或 'off'
,或者指定为数值或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,'off'
等效于 false
。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的 on/off 逻辑值。
'on'
- 显示图。'off'
- 隐藏图而不将其删除。当图不可见时,您仍可以访问其属性。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
GetObservable | true |
SetObservable | true |
Parent
— 父容器
Figure
对象 (默认) | Panel
对象 | Tab
对象 | TiledChartLayout
对象
图的父容器,指定为 Figure
、Panel
、Tab
或 TiledChartLayout
对象。
属性:
GetAccess | public |
SetAccess | public |
Transient | true |
Dependent | true |
GetObservable | true |
SetObservable | true |
NonCopyable | true |
HandleVisibility
— 对象句柄的可见性
'on'
(默认) | 'off'
图对象句柄在其父级的子级列表中的可见性,指定为下列值之一:
'on'
- 图对象句柄始终可见。'off'
- 图对象句柄始终不可见。该选项用于防止另一函数无意中对图进行更改。要在执行该函数时暂时隐藏句柄,可将HandleVisibility
设置为'off'
。'callback'
- 图对象句柄在回调或回调所调用的函数中可见,但在从命令行调用的函数中不可见。此选项阻止通过命令行窗口访问对象,但允许回调函数访问对象。
如果图的父对象的 Children
属性中未列出该对象,则通过搜索对象层次结构或查询句柄属性获取对象句柄的函数无法返回该对象。这包括 get
、findobj
、gca
、gcf
、gco
、newplot
、cla
、clf
和 close
。
隐藏的对象句柄仍有效。将根 ShowHiddenHandles
属性设置为 'on'
可以列出所有对象句柄,而不管它们的 HandleVisibility
属性设置是什么。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
GetObservable | true |
SetObservable | true |
示例
对线图进行平滑处理
定义名为 SmoothPlot
的类,该类使用一条蓝色点线和该线条经过平滑处理的版本绘制一组数据。
要定义该类,请创建包含以下类定义的名为 SmoothPlot.m
的文件,该文件具有如下特性:
XData
和YData
公共属性,用于存储原始线条的 x 和 y 坐标数据。SmoothColor
和SmoothWidth
公共属性,用于控制平滑线条的颜色和宽度。OriginalLine
和SmoothLine
私有属性,用于存储原始数据和平滑数据的Line
对象。一个
setup
方法,用于初始化OriginalLine
和SmoothLine
。一个
update
方法,当用户更改属性值时,该方法会更新绘图。一个
createSmoothData
方法,用于计算YData
的经过平滑处理的版本。
classdef SmoothPlot < matlab.graphics.chartcontainer.ChartContainer properties XData (1,:) double = NaN YData (1,:) double = NaN SmoothColor (1,3) double {mustBeGreaterThanOrEqual(SmoothColor,0),... mustBeLessThanOrEqual(SmoothColor,1)} = [0.9290 0.6940 0.1250] SmoothWidth (1,1) double = 2 end properties(Access = private,Transient,NonCopyable) OriginalLine (1,1) matlab.graphics.chart.primitive.Line SmoothLine (1,1) matlab.graphics.chart.primitive.Line end methods(Access = protected) function setup(obj) % Create the axes ax = getAxes(obj); % Create the original and smooth lines obj.OriginalLine = plot(ax,NaN,NaN,'LineStyle',':'); hold(ax,'on') obj.SmoothLine = plot(ax,NaN,NaN); hold(ax,'off') end function update(obj) % Update line data obj.OriginalLine.XData = obj.XData; obj.OriginalLine.YData = obj.YData; obj.SmoothLine.XData = obj.XData; obj.SmoothLine.YData = createSmoothData(obj); % Update line color and width obj.SmoothLine.Color = obj.SmoothColor; obj.SmoothLine.LineWidth = obj.SmoothWidth; end function sm = createSmoothData(obj) % Calculate smoothed data v = ones(1,10)*0.1; sm = conv(obj.YData,v,'same'); end end end
接下来,创建一对 x
和 y
向量。调用 ChartContainer
类提供的 SmoothPlot
构造函数方法来绘制 x
和 y
。指定 'XData'
和 'YData'
名称-值对组参量,并以 c
形式返回对象。
x = 1:1:100; y = 10*sin(x./5) + 8*sin(10.*x + 0.5); c = SmoothPlot('XData',x,'YData',y);
使用 c
将平滑线的颜色更改为红色。
c.SmoothColor = [1 0 0];
详细信息
为图启用用户定义的回调
定义类时,您可以包含一个 events
模块以使图能够侦听事件。
如果使用 HasCallbackProperty
属性定义 events
模块,则 MATLAB 会为模块中的每个事件在图上创建一个公共属性。您的用户可以使用属性来定义事件触发时执行的回调函数。每个属性的名称均为对应事件的名称在末尾追加字母 Fcn
。例如,当用户点击图时执行回调函数的图可能会定义名为 Clicked
的事件。如果指定了 HasCallbackProperty
属性,MATLAB 会自动在图对象上创建名为 ClickedFcn
的对应公共属性。
例如,以下是名为 MyChart
的图类的 events
模块:
events (HasCallbackProperty, NotifyAccess = protected)
Clicked
end
myfunction
函数。 c = MyChart('ClickedFcn',@myfunction)
版本历史记录
在 R2019b 中推出R2020a: ChartContainer
子类在 setup
方法运行后进行属性赋值
当您创建 ChartContainer
子类的实例并将属性名称-值对组参量传递给构造函数时,属性赋值将在 setup
方法运行后进行。在 R2019b 中,属性赋值在 setup
方法运行之前进行。
如果您的类的 setup
方法引用对象上某个属性的值,您可以通过以下任一方式更新代码:
在定义属性时为其赋予默认值。
将引用该属性的代码移至
update
方法。
R2020a: 不推荐使用 ActivePositionProperty
从 R2020a 开始,不推荐设置或获取 ActivePositionProperty
。请改用 PositionConstraint
属性。
当前没有删除 ActivePositionProperty
的计划,但当您对图对象调用 set
、get
或 properties
函数时,该属性不再列出。
要更新代码,请进行以下更改:
将
ActivePositionProperty
的所有实例替换为PositionConstraint
。将所有对
"position"
选项的引用替换为"innerposition"
选项。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)