Разработка конструкторов для классов графика

Когда вы разрабатываете график как подкласс 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 класс выполняет эти задачи:

  • Проверяет количество входных параметров и возвращает ошибку, если номер меньше три.

  • Преобразует xY, и 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

Пример: график доверительных границ с пользовательским конструктором

В этом примере показано, как разработать график, который имеет пользовательского конструктора, который принимает входные параметры одно значения и дополнительные аргументы пары "имя-значение". График строит график с маркерами и окружающим полем доверия.

Создайте программный файл под названием ConfidenceChart.m в папке, которая находится на пути MATLAB®. Задайте класс путем выполнения этих шагов.

ШагРеализация

Выведите из 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

Реализуйте пользовательский метод конструктора, который принимает xY, и margin значения и дополнительные аргументы пары "имя-значение" свойства.

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

Смотрите также

Классы

Функции

Свойства

Похожие темы