exponenta event banner

Обзор разработки диаграммы

Функции диаграммы, такие как plot, scatter, и bar позволяет быстро визуализировать данные с помощью основных средств управления такими аспектами, как цвет и стиль линий. Для создания пользовательских диаграмм можно объединить несколько графических объектов, задать свойства этих объектов или вызвать дополнительные функции. В R2019a и более ранних версиях обычным способом хранения кода настройки и совместного использования его другими пользователями является написание сценария или функции.

Начиная с R2019b, можно создать реализацию класса для диаграмм, определив подкласс ChartContainer базовый класс. Создание класса позволяет:

  • Обеспечение удобного интерфейса для пользователей - когда пользователи хотят настроить аспект диаграммы, они могут задать свойство, а не изменять и повторно запускать графический код. Пользователи могут изменять свойства в командной строке или проверять их в инспекторе свойств.

  • Инкапсулировать алгоритмы и примитивные графические объекты - реализуются методы, которые выполняют вычисления и управляют базовыми графическими объектами. Организация кода таким образом позволяет скрыть сведения о реализации от пользователей.

При определении диаграммы, производной от этого базового класса, экземпляры диаграммы являются членами иерархии графических объектов. В результате диаграммы совместимы со многими аспектами графической системы. Например, gca и findobj функции могут возвращать экземпляры диаграммы.

Структура класса диаграммы

Первая строка класса диаграммы определяет matlab.graphics.chartcontainer.ChartContainer класс как суперкласс. Например, первая строка класса с именем ConfidenceChart выглядит следующим образом:

classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer

Помимо указания суперкласса, включите в определение класса следующие компоненты.

КомпонентОписание

Блок общедоступных свойств
рекомендуется

Этот блок определяет все свойства, к которым пользователи должны иметь доступ. Вместе эти свойства составляют пользовательский интерфейс диаграммы.

Блок частной собственности
рекомендуется

В этом блоке хранятся базовые графические объекты и другие сведения о реализации, доступ к которым пользователям не требуется.

В этом блоке задайте следующие значения атрибутов:

  • Access = private

  • Transient

  • NonCopyable

setup метод
(обязательно)

Этот метод задает начальное состояние диаграммы. Она выполняется один раз, когда MATLAB ® создает объект.

Определите этот метод в защищенном блоке, чтобы его мог выполнять только класс.

update метод
(обязательно)

Этот метод обновляет базовые объекты диаграммы. Выполняется во время следующего drawnow после изменения пользователем одного или нескольких значений свойств.

Определите этот метод в том же защищенном блоке, что и setup способ.

Неявный метод конструктора

Нет необходимости писать метод конструктора для класса, поскольку конструктор наследуется от 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. Определите класс, выполнив следующие действия.

ШагВнедрение

Вывести из ChartContainer базовый класс.

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

Реализация setup способ. В этом случае вызовите plot и patch для создания Patch и Line соответственно. Сохраните эти объекты в соответствующих частных свойствах.

Поверните положение удержания осей обратно в 'off' перед выходом из метода.

    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

Реализация update способ. В этом случае обновите координаты x и y, цвет и обозначение маркера нижележащих объектов.

        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 и можно настроить свойства диаграммы в Инспекторе свойств.

Функции, описанные в этой таблице, поддерживаются только в том случае, если они включены для диаграммы.

ОсобенностьОписаниеДополнительные сведения
Легенда

Включить legend и инструмент легенды на панели инструментов рисунка.

matlab.graphics.chartcontainer.mixin.Legend
Цветная полоса

Включить colorbar и инструмент colorbar на панели инструментов рисунка.

matlab.graphics.chartcontainer.mixin.Colorbar
Различные типы осей или несколько осей

Отображение одного или нескольких декартовых, полярных или географических графиков.

Разработка диаграмм с полярными осями, географическими осями или несколькими осями
функции

Включить функции, задающие свойства осей, такие как title, xlim, и ylim функции.

Включение функций удобства для настройки свойств осей
Сохранение и загрузка

Храните изменения после взаимодействия пользователей с диаграммой, чтобы они могли сохранить диаграмму и восстановить ее состояние при загрузке обратно в MATLAB.

Сохранение и загрузка экземпляров классов диаграмм

См. также

Классы

Функции

Свойства

Связанные темы