Построение диаграммы функций, таких как plotрассеяние, и bar позвольте вам быстро визуализировать свои данные с основным управлением аспектами, такими как цветной и стиль линии. Чтобы создать пользовательскую визуализацию, можно объединить несколько графических объектов, установить свойства на тех объектах или вызвать дополнительные функции. В R2019a и более ранних релизах, распространенный способ сохранить ваш код индивидуальной настройки и совместно использовать его с другими состоит в том, чтобы записать скрипт или функцию.
Начиная в R2019b, можно создать реализацию класса для графиков путем определения подкласса ChartContainer базовый класс. Создание класса позволяет:
Обеспечьте удобный интерфейс для своих пользователей — Когда пользователи хотят настроить аспект вашего графика, они могут установить свойство вместо того, чтобы иметь необходимость изменить и повторно выполнить ваш графический код. Пользователи могут изменить свойства в командной строке или смотреть их в Property Inspector.
Инкапсулируйте алгоритмы и примитивные графические объекты — Вы реализуете методы, которые выполняют вычисления и управляют базовыми графическими объектами. Организация вашего кода таким образом позволяет вам скрывать детали реализации от своих пользователей.
ChartContainer базовый класс поддерживает графики, которые имеют сингл Оси декартовой системы координат. Когда вы задаете график, который выводит из этого базового класса, экземпляры вашего графика являются членами иерархии графического объекта. В результате ваши графики совместимы со многими аспектами графической системы. Например, gca и findobj функции могут возвратить экземпляры вашего графика.
Первая линия класса графика задает matlab.graphics.chartcontainer.ChartContainer класс как суперкласс. Например, первая линия класса под названием ConfidenceChart выглядит так:
classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainerВ дополнение к определению суперкласса включайте следующие компоненты в свое определение класса.
| Компонент | Описание |
|---|---|
Блок общественной собственности | Этот блок задает все свойства, к которым вы хотите, чтобы у ваших пользователей был доступ. Вместе, эти свойства составляют пользовательский интерфейс вашего графика. |
Блок частной собственности | Этот блок хранит базовые графические объекты и другие детали реализации, что вы не хотите своих пользователей для доступа. В этом блоке, набор эти значения атрибута:
|
| Этот метод устанавливает начальное состояние графика. Это выполняется однажды, когда MATLAB® создает объект после установки заданных пользователями значений свойств. Задайте этот метод в защищенном блоке так, чтобы только ваш класс мог выполнить его. |
| Этот метод обновляет основные объекты в вашем графике. Это выполняется при следующих условиях:
Задайте этот метод в том же защищенном блоке как |
Вы не должны писать метод конструктора для своего класса, потому что конструктор наследован от ChartContainer базовый класс. Конструктор принимает дополнительные входные параметры: родительский контейнер и любое количество аргументов пары "имя-значение" для установки свойств на графике. Например, если вы задаете класс под названием ConfidenceChart это имеет публичные свойства XData и YData, можно создать экземпляр класса с помощью любой из этих команд:
c = ConfidenceChart(gcf,'XData',[1 2 3],'YData',[4 5 6]) c = ConfidenceChart('XData',[1 2 3],'YData',[4 5 6])
Если вы хотите обеспечить интерфейс, который принимает входные параметры таким же образом, как типичная функция делает, можно задать пользовательский метод конструктора. Смотрите Конструкторов Записи для Классов Графика для получения дополнительной информации.
Разделите свои свойства класса по крайней мере между двумя блоками:
Общедоступный блок для хранения компонентов стоящего с пользователем интерфейса
Частный блок для хранения деталей реализации, которые вы хотите скрыть
Свойства, которые входят в общедоступный блок, хранят входные значения, обеспеченные пользователем. Например, график, который отображает линию, может сохранить x - и y - координатные векторы в двух публичных свойствах. Поскольку аргументами пары "имя-значение" свойства являются дополнительные входные параметры к неявному методу конструктора, рекомендуемый подход должен инициализировать публичные свойства к значениям по умолчанию. Если вы задаете публичные свойства, которые хранят координатные значения, инициализируя их к NaN значения или пустые массивы создают пустой график, если пользователь вызывает конструктора без каких-либо входных параметров.
Свойства, которые входят в частный блок, хранят базовые графические объекты, которые составляют ваш график, в дополнение к любым расчетным значениям, которые вы хотите сохранить. В конечном счете ваш класс будет использовать данные в публичных свойствах, чтобы сконфигурировать основные объекты. Включением Transient и NonCopyable атрибуты для частного блока, вы стараетесь не хранить избыточную информацию, если пользователь копирует или сохраняет экземпляр графика.
Например, вот блоки свойства для графика, который отображает Line возразите и Patch объект. Блок общественной собственности хранит значения, которыми может управлять пользователь: x - и y - координаты линии, значения поля уверенности, символа маркера и значения цвета. Блок частной собственности хранит Line и Patch объекты.
properties XData = NaN YData = NaN ConfidenceMargin = 0.15 MarkerSymbol = 'o' Color = [1 0 0] end properties(Access = private,Transient,NonCopyable) LineObject PatchObject end
setup метод выполняется однажды, когда MATLAB создает объект диаграммы. Используйте этот метод для:
Вызовите функции построения графика, чтобы создать примитивные графические объекты, которые вы хотите использовать в графике.
Храните элементарные объекты, возвращенные функциями построения графика как частные свойства на объекте диаграммы.
Сконфигурируйте примитивные графические объекты.
Сконфигурируйте оси.
Большинство функций построения графика имеет дополнительный входной параметр для определения целевых осей. Когда вы вызываете функции построения графика из метода класса, необходимо задать целевые оси. Используйте getAxes метод, чтобы получить объект осей для вашего графика. Затем можно передать объект осей функции построения графика или использовать его, чтобы установить свойства осей, такие как подписи по осям.
Если вы хотите отобразить несколько элементарных объектов в осях, вызовите hold функция между графическим выводом команд. Задайте входной параметр осей, когда вы вызовете hold функция. Задержите состояние удержания к 'off' после вашей последней команды графического вывода.
Например, рассмотрите график, который имеет эти свойства:
Два публичных свойств под названием XData и YData для хранения x - и y - координаты линии
Два частных свойств под названием LineObject и PatchObject
setup метод получает объект осей путем вызова getAxes метод. Затем setup вызывает plot функция и хранилища выход в LineObject свойство. Затем setup устанавливает состояние удержания осей к 'on', и затем вызывает patch функция, чтобы возвратить значение PatchObject свойство. Последняя линия кодовых наборов состояние удержания осей назад к 'off'.
function setup(obj) % Get the axes ax = getAxes(obj); % Create Patch and Line objects obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,... 'EdgeColor','none'); hold(ax,'on') obj.LineObject = plot(ax,obj.XData,obj.YData); % Turn hold state off hold(ax,'off') end
Когда пользователь изменяет одни или несколько значений свойств на объекте диаграммы, MATLAB отмечает объект диаграммы для обновления. update метод выполняет в следующий раз drawnow выполняется. drawnow функция автоматически периодически выполняется, на основе состояния графической среды в сеансе работы с MATLAB пользователя. Таким образом может быть задержка между изменением значений свойств и наблюдением результатов тех изменений.
Используйте update метод, чтобы реконфигурировать базовые графические объекты в вашем графике на основе новых значений публичных свойств. Как правило, этот метод не различает который из измененных публичных свойств. Это реконфигурировало все аспекты базовых графических объектов, которые зависят от публичных свойств.
Например, рассмотрите график, который имеет эти свойства:
Два публичных свойств под названием XData и Color
Два частных свойств под названием LineObject и PatchObject
update метод обновляет XData и Color свойства Line и Patch объекты.
function update(obj) % Update XData of line object obj.LineObject.XData = obj.XData; % Update patch XData x = obj.XData; obj.PatchObject.XData = [x x(end:-1:1)]; % Update line object colors obj.LineObject.Color = obj.Color; obj.PatchObject.FaceColor = obj.Color; end
В этом примере показано, как создать график для того, чтобы построить график с доверительными границами. Создайте файл с именем определения класса ConfidenceChart.m в папке, которая находится на пути MATLAB. Задайте класс путем выполнения этих шагов.
| Шаг | Реализация |
|---|---|
Выведите из |
classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer |
Задайте публичные свойства. |
properties
XData = NaN
YData = NaN
ConfidenceMargin = 0.15
MarkerSymbol = 'o'
Color = [1 0 0]
end |
Задайте частные свойства. |
properties(Access = private,Transient,NonCopyable)
LineObject
PatchObject
end |
Реализуйте Возвратите состояние удержания осей к |
methods(Access = protected)
function setup(obj)
% get the axes
ax = getAxes(obj);
% Create Patch and Line objects
obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,...
'EdgeColor','none');
hold(ax,'on')
obj.LineObject = plot(ax,obj.XData,obj.YData);
% Turn hold state off
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 |
Затем создайте экземпляр графика путем вызова неявного метода конструктора с несколькими публичных свойств:
x = 0:0.2:10; y = besselj(0,x); c = ConfidenceChart('XData',x,'YData',y,'ConfidenceMargin',0.15);

Измените цвет.
c.Color = [0 0 1];

По умолчанию экземпляры ваших графиков поддерживают большую часть функциональности, которая характерна для всех графиков MATLAB. Например, gca и findobj функции могут возвратить экземпляры вашего графика. Можно также передать экземпляры графика к set и get функции, и можно сконфигурировать свойства графика в Property Inspector.
Функции, описанные в этой таблице, поддерживаются, только если вы включаете им для вашего графика.
| Функция | Описание | Больше информации |
|---|---|---|
| Легенда | Включите | matlab.graphics.chartcontainer.mixin.Legend |
| Colorbar | Включите | matlab.graphics.chartcontainer.mixin.Colorbar |
| Функции удобства | Включите функции, которые устанавливают свойства на осях, таких как | Включение функций удобства для установки Свойств осей графика |
| Сохранение и загрузка | Сохраните изменения после того, как пользователи взаимодействуют с графиком, так, чтобы они могли сохранить график и восстановить его состояние, когда они загружают его назад в MATLAB. | Сохранение и загрузка экземпляров классов графика |