Функции диаграммы, такие как plot, scatter, и bar позволяет быстро визуализировать данные с помощью основных средств управления такими аспектами, как цвет и стиль линий. Для создания пользовательских диаграмм можно объединить несколько графических объектов, задать свойства этих объектов или вызвать дополнительные функции. В R2019a и более ранних версиях обычным способом хранения кода настройки и совместного использования его другими пользователями является написание сценария или функции.
Начиная с R2019b, можно создать реализацию класса для диаграмм, определив подкласс 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 создает объект диаграммы. Любые значения свойств, переданные в качестве аргументов пары имя-значение методу конструктора, назначаются после выполнения этого метода.
Используйте setup метод для:
Вызовите функции печати для создания элементарных графических объектов, которые необходимо использовать в диаграмме.
Храните элементарные объекты, возвращаемые функциями печати, как частные свойства объекта диаграммы.
Настройте элементарные графические объекты.
Сконфигурируйте оси.
Многие графические функции имеют необязательный входной аргумент для задания объекта целевых осей. Эти функции включают функции печати (например, plot, scatter, и bar) и функции, изменяющие оси (например, hold, grid, и title). При вызове этих типов функций из метода класса необходимо указать объект целевых осей. Доступ к объекту axes можно получить, вызвав getAxes способ. Этот метод возвращает объект axes или создает объект Decartesian axes, если диаграмма еще не содержит объект axes.
Внимание
Вызов функций печати или функций, изменяющих оси, без указания целевых осей может привести к неожиданным результатам.
При вызове функций печати в setup , укажите временные значения (например, NaN) для данных координат. Кроме того, укажите временные значения для других аргументов, которые соответствуют общим свойствам класса. Это позволяет избежать установки одинаковых значений свойств в обоих setup и update методы.
Если требуется отобразить несколько примитивных объектов в осях, вызовите hold функция между командами печати. Возврат в состояние удержания 'off' после выполнения последней команды печати.
Например, рассмотрим диаграмму, отображающую строку и фрагмент. Имеет следующие свойства:
Называются два общедоступных свойства XData и YData для хранения координат x и y линии
Называются два частных свойства LineObject и PatchObject
setup получает объект axes путем вызова 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 и можно настроить свойства диаграммы в Инспекторе свойств.
Функции, описанные в этой таблице, поддерживаются только в том случае, если они включены для диаграммы.
| Особенность | Описание | Дополнительные сведения |
|---|---|---|
| Легенда | Включить | matlab.graphics.chartcontainer.mixin.Legend |
| Цветная полоса | Включить | matlab.graphics.chartcontainer.mixin.Colorbar |
| Различные типы осей или несколько осей | Отображение одного или нескольких декартовых, полярных или географических графиков. | Разработка диаграмм с полярными осями, географическими осями или несколькими осями |
| функции | Включить функции, задающие свойства осей, такие как | Включение функций удобства для настройки свойств осей |
| Сохранение и загрузка | Храните изменения после взаимодействия пользователей с диаграммой, чтобы они могли сохранить диаграмму и восстановить ее состояние при загрузке обратно в MATLAB. | Сохранение и загрузка экземпляров классов диаграмм |