Когда вы разрабатываете график как подкласс 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
Этот пример показов, как разработать график, который имеет пользовательский конструктор, который принимает одноценные входные параметры и дополнительные аргументы пары "имя-значение". График строит график линии с маркерами и окружающим доверием полем.
Создайте программный файл с именем ConfidenceChart.m
в папке, находящейся в MATLAB® путь. Определите класс путем выполнения следующих шагов.
Шаг | Реализация |
---|---|
Вывод из |
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','>');