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