Когда вы разрабатываете график как подкласс 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®. Задайте класс путем выполнения этих шагов.
| Шаг | Реализация |
|---|---|
Выведите из |
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','>');
