Main Content

为图类编写构造函数

当您将图开发为 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 类的以下构造函数方法将执行下列任务:

  • 检查输入参量的数量,如果该数量少于三个,则返回错误。

  • xymargin 值转换为 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 的程序文件。按照以下步骤定义类。

步骤实现

ChartContainer 基类派生而来。

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

实现自定义构造函数方法,该方法接受 xymargin 值以及可选的属性名称-值对组参量。

    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

实现 setup 方法。

    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

实现 update 方法。

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

另请参阅

函数

属性

相关主题