Построение диаграммы функций такой как plot, scatter, и bar позвольте вам быстро визуализировать свои данные с основным управлением аспектами, такими как цветной и стиль линии. Чтобы создать пользовательские графики, можно объединить несколько графических объектов, установить свойства на тех объектах или вызвать дополнительные функции. В R2019a и более ранних релизах, распространенный способ сохранить ваш код индивидуальной настройки и совместно использовать его с другими состоит в том, чтобы записать скрипт или функцию.
Начиная в R2019b, можно создать реализацию класса для графиков путем определения подкласса ChartContainer базовый класс. Создание класса позволяет:
Обеспечьте удобный интерфейс для своих пользователей — Когда пользователи хотят настроить аспект вашего графика, они могут установить свойство вместо того, чтобы иметь необходимость изменить и повторно выполнить ваш графический код. Пользователи могут изменить свойства в командной строке или смотреть их в Property Inspector.
Инкапсулируйте алгоритмы и примитивные графические объекты — Вы реализуете методы, которые выполняют вычисления и управляют базовыми графическими объектами. Организация вашего кода таким образом позволяет вам скрывать детали реализации от своих пользователей.
Когда вы задаете график, который выводит из этого базового класса, экземпляры вашего графика являются членами иерархии графического объекта. В результате ваши графики совместимы со многими аспектами графической системы. Например, 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 создает объект диаграммы. Любые значения свойств, переданные как аргументы пары "имя-значение" методу конструктора, присвоены после того, как этот метод выполняется.
Используйте setup метод к:
Вызовите функции построения графика, чтобы создать примитивные графические объекты, которые вы хотите использовать в графике.
Храните элементарные объекты, возвращенные функциями построения графика как частные свойства на объекте диаграммы.
Сконфигурируйте примитивные графические объекты.
Сконфигурируйте оси.
Много графических функций имеют дополнительный входной параметр для определения целевого объекта осей. Эти функции включают функции построения графика (такой как plot, scatter, и bar) и функции, которые изменяют оси (такой как hold, grid, и title). Когда вы вызываете эти типы функций из метода класса, необходимо задать целевой объект осей. Можно получить доступ к объекту осей путем вызова getAxes метод. Этот метод возвращает объект осей, или это создает объект Осей декартовой системы координат, если график уже не содержит объект осей.
Внимание
Вызов функций построения графика или функций, которые изменяют оси, не задавая целевые оси, может привести к неожиданным результатам.
Когда вы вызываете функции построения графика в setup метод, задайте временные ценности (такие как NaN) для координатных данных. Кроме того, задайте временные ценности для других аргументов, которые соответствуют публичным свойствам вашего класса. Выполнение так старается не устанавливать те же значения свойств в обоих setup и update методы.
Если вы хотите отобразить несколько элементарных объектов в осях, вызовите hold функция между графическим выводом команд. Задержите состояние удержания к 'off' после вашей последней команды графического вывода.
Например, рассмотрите график, который отображает линию и закрашенную фигуру. Это имеет эти свойства:
Два публичных свойств под названием XData и YData для хранения x - и y - координаты линии
Два частных свойств под названием LineObject и PatchObject
setup метод получает объект осей путем вызова getAxes метод. Затем это вызывает patch функция и хранилища выход в PatchObject свойство. Следующая строка кодового набора состояние удержания осей к 'on' прежде, чем вызвать plot функция, чтобы создать LineObject свойство. Последняя линия кодовых наборов состояние удержания осей назад к '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,NaN,NaN); % Turn hold state off hold(ax,'off') end
Когда пользователь изменяет одни или несколько значений свойств на объекте диаграммы, MATLAB отмечает объект диаграммы для обновления. update метод запускается впервые после setup запуски метода. Затем это запускается в следующий раз 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,NaN,NaN);
% 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. | Сохранение и загрузка экземпляров классов графика |