Построение диаграммы функций, таких как 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. | Сохранение и загрузка экземпляров классов графика |