为图类编写构造函数
当您将图开发为 ChartContainer
基类的子类时,基类提供默认构造函数,该构造函数接受用于设置图属性的可选名称-值对组参数。例如,此命令创建名为 ConfidenceChart
的类实例。
ConfidenceChart('XData',x,'YData',y,'ConfidenceMargin',0.15,'Color',[1 0 0])
通过编写自定义构造函数方法,您可以提供一个接口,该接口接受单个参数值和可选的名称-值对组参数。例如,您可以设计自定义构造函数来更改 ConfidenceChart
的调用语法,以便这两个命令均为创建图的有效方法:
ConfidenceChart(x,y,0.15)
ConfidenceChart(x,y,0.15,'Color',[1 0 0])
当您编写构造函数方法时,请:
指定要在函数声明中支持的输入参数。将
varargin
作为最后一个输入参数,以捕获用户指定的任何属性名称-值对组参数。在对图对象进行所有其他引用之前调用
ChartContainer
构造函数。
例如,ConfidenceChart
类的以下构造函数方法将执行下列任务:
检查输入参数的数量,如果该数量少于三个,则返回错误。
将
x
、y
和margin
值转换为ChartContainer
构造函数接受的名称-值对组参数,并将结果存储在args
中。将用户指定的任何名称-值对组参数追加到
args
的末尾。将
args
传递给ChartContainer
构造函数方法。
methods function obj = ConfidenceChart(x,y,margin,varargin) % Check for at least three inputs if nargin < 3 error('Not enough inputs'); end % Convert x, y, and margin into name-value pairs args = {'XData', x, 'YData', y, 'ConfidenceMargin', margin}; % Combine args with user-provided name-value pairs args = [args varargin]; % Call superclass constructor method obj@matlab.graphics.chartcontainer.ChartContainer(args{:}); end end
示例:具有自定义构造函数的置信边界图
此示例说明如何开发图,该图具有接受单值输入参数和可选的名称-值对组参数的自定义构造函数。该图绘制一条带标记和置信边界的线。
在位于 MATLAB® 路径上的文件夹中创建一个名为 ConfidenceChart.m
的程序文件。按照以下步骤定义类。
步骤 | 实现 |
---|---|
从 |
classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer |
定义公共属性。 |
properties XData (1,:) double = NaN YData (1,:) double = NaN ConfidenceMargin (1,1) double = 0.15 MarkerSymbol (1,:) char = 'o' Color (1,3) double {mustBeGreaterThanOrEqual(Color,0),... mustBeLessThanOrEqual(Color,1)} = [1 0 0] end |
定义私有属性。 |
properties(Access = private,Transient,NonCopyable)
LineObject (1,1) matlab.graphics.chart.primitive.Line
PatchObject (1,1) matlab.graphics.primitive.Patch
end |
实现自定义构造函数方法,该方法接受 | methods function obj = ConfidenceChart(x,y,margin,varargin) % Check for at least three inputs if nargin < 3 error('Not enough inputs'); end % Convert x, y, and margin into name-value pairs args = {'XData', x, 'YData', y, 'ConfidenceMargin', margin}; % Combine args with user-provided name-value pairs. args = [args varargin]; % Call superclass constructor method obj@matlab.graphics.chartcontainer.ChartContainer(args{:}); end end |
实现 |
methods(Access = protected) function setup(obj) % get the axes ax = getAxes(obj); % Create Patch and objects obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,... 'EdgeColor','none'); hold(ax,'on') obj.LineObject = plot(ax,NaN,NaN); hold(ax,'off') end |
实现 |
function update(obj) % Update XData and YData of Line obj.LineObject.XData = obj.XData; obj.LineObject.YData = obj.YData; % Update patch XData and YData x = obj.XData; obj.PatchObject.XData = [x x(end:-1:1)]; y = obj.YData; c = obj.ConfidenceMargin; obj.PatchObject.YData = [y+c y(end:-1:1)-c]; % Update colors obj.LineObject.Color = obj.Color; obj.PatchObject.FaceColor = obj.Color; % Update markers obj.LineObject.Marker = obj.MarkerSymbol; end end end |
接下来,创建 ConfidenceChart
的一个实例。指定 x 和 y 坐标、边距值和标记符号。
x = 0:0.2:10; y = besselj(0,x); ConfidenceChart(x,y,0.20,'MarkerSymbol','>');