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

Когда вы разрабатываете график как подкласс ChartContainer класс, рассмотрите включение некоторых функций удобства MATLAB® для установки свойств на осях. Например, можно спроектировать класс, чтобы поддержать title функция. Путем включения функций удобства вы обеспечиваете пользовательский опыт, который сопоставим с функциями построения графика MATLAB.

Поддержка различных типов свойств

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

Функция удобстваСвязанное свойство осейТип свойства

title

Title

Невычисленный

xlabelYLabel zlabel

XLabelYLabel , и ZLabel, соответственно

Невычисленный

xlimylimzlim

XLimylim, и ZLim, соответственно

Вычисленный

xticksyticksпалки

XTick, YTick, и ZTick, соответственно

Вычисленный

xticklabelsyticklabelszticklabels

XTickLabel, YTickLabel, и ZTickLabel, соответственно

Вычисленный

view

View

Вычисленный

Включите функции для невычисленных свойств

Невычисленные свойства являются фиксированными значениями. Они не изменяются, пока пользователь или ваш код не изменяют их явным образом.

Чтобы включить функцию удобства для невычисленного свойства, задайте общественную собственность в своем классе, который хранит значение свойства осей, которым вы хотите управлять. Затем задайте открытый метод, который имеет то же имя и поддерживает те же синтаксисы вызова как функция удобства, которую вы хотите поддерживать. Добавьте строку кода в метод, который устанавливает значение свойства. Например, рассмотрите класс, который имеет общественную собственность под названием TitleText для хранения заголовка. Следующий код показывает title метод для класса.

function title(obj,txt) 
       obj.TitleText = txt;
end

Затем добавьте строку кода в update метод, который вызывает функцию удобства MATLAB, чтобы установить соответствующее свойство осей.

title(getAxes(obj),obj.TitleText);

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

  1. title метод на классе устанавливает TitleText свойство, которое отмечает график для обновления.

  2. В следующий раз drawnow выполняется, update метод выполняет и вызывает title функция на осях.

  3. title функционируйте обновляет Title свойство на осях.

Включите функции для вычисленных свойств

Вычисленными свойствами управляют оси. Оси повторно вычисляют свои значения в зависимости от содержимого осей и базовых данных.

Чтобы включить функцию удобства для вычисленного свойства, задайте метод, который имеет то же имя и синтаксис вызова как функция удобства, которую вы хотите включить. В том методе вызовите функцию удобства и задайте оси в качестве первого аргумента. Например, чтобы включить xlim функционируйте, задайте метод под названием xlim в вашем классе. Начиная с xlim функция принимает переменное количество входных параметров, необходимо задать varargin как второй входной параметр. xlim функционируйте также поддерживает переменное количество выходных аргументов, таким образом, необходимо задать [varargout{1:nargout}] поддерживать те аргументы.

function varargout = xlim(obj,varargin) 
    ax = getAxes(obj);
    [varargout{1:nargout}] = xlim(ax,varargin{:});
end

Чтобы обеспечить доступ к соответствующим значениям свойств на вашем графике, задайте два зависимых свойства на своем классе. Первое свойство обеспечивает доступ к значению, что удобство функционирует средства управления. Другое свойство обеспечивает доступ к свойству режима, которое указывает, как первым свойством управляют. Свойство режима может иметь значение 'auto' или 'manual'. Задайте эти свойства как зависимого так, чтобы график не хранил значения. Оси управляют и хранят эти значения. Например, чтобы обеспечить доступ к XLim и XLimMode свойства на осях, задайте пару зависимых свойств под названием XLimits и XLimitsMode.

properties (Dependent)
    XLimits (1,2) double
    XLimitsMode {mustBeMember(XLimitsMode,{'auto','manual'})}
end

Затем задайте set и get методы для каждого зависимого свойства. В рамках каждого метода, набор соответствующее свойство осей. Следующий код показывает set методы и get методы для XLimits и XLimitsMode свойства.

function set.XLimits(obj,xlm)
    ax = getAxes(obj);
    ax.XLim = xlm;
end
function xlm = get.XLimits(obj)
    ax = getAxes(obj);
    xlm = ax.XLim;
end
function set.XLimitsMode(obj,xlmmode)
    ax = getAxes(obj);
    ax.XLimMode = xlmmode;
end
function xlm = get.XLimitsMode(obj)
    ax = getAxes(obj);
    xlm = ax.XLimMode;
end

После того, как вы выполните предыдущие шаги и сохраните ваш файл класса, можно создать экземпляр графика и вызвать xlim функционируйте, чтобы изменить x - пределы по осям в графике. xlim метод выполняется, который в свою очередь вызывает xlim функционируйте, чтобы обновить XLim свойство на осях.

Примечание

По умолчанию MATLAB не хранит изменений, когда пользователь вызывает xlim и ylim функции. Чтобы оказать поддержку для сохранения этих изменений, когда пользователь сохранит и загрузит ваш график, смотрите Сохранение и Загрузку Экземпляров Классов Графика.

Пример: стройте диаграмму, который поддерживает titlexlim , и ylim

Задайте BarErrorBarChart класс для отображения графика, который содержит панели и значение погрешности, и также поддерживает titlexlim , и ylim функции.

Чтобы задать этот класс, создайте программный файл под названием BarErrorBarChart.m в папке, которая находится на пути MATLAB. Затем реализуйте класс путем выполнения шагов в таблице. Для рабочей реализации этого класса смотрите Класс Графика Который заголовок Поддержек, xlim, и Функции ylim.

ШагРеализация

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

classdef BarErrorBarChart < matlab.graphics.chartcontainer.ChartContainer

Задайте публичные свойства. Включайте TitleText свойство сохранить заголовок.

    properties
        XData (1,:) double = NaN
        YData (1,:) double = NaN
        EData (1,:) double = NaN
        TitleText (:,:) char = ''
    end

Задайте зависимые свойства, которые обеспечивают доступ к x и пределам y и соответствующим свойствам режима.

    properties (Dependent)
        % Provide properties to support setting and getting
        XLimits (1,2) double
        XLimitsMode {mustBeMember(XLimitsMode,{'auto','manual'})}
        YLimits (1,2) double
        YLimitsMode {mustBeMember(YLimitsMode,{'auto','manual'})}
    end

Задайте частные свойства. Одно свойство хранит Bar объект и другие хранилища ErrorBar объект.

    properties (Access = private)
        BarObject (1,1) matlab.graphics.chart.primitive.Bar
        ErrorBarObject (1,1) matlab.graphics.chart.primitive.ErrorBar
    end

Реализуйте setup метод. В этом случае вызовите bar и errorbar функции, чтобы создать Bar и ErrorBar объекты соответственно. Храните объекты в соответствующих свойствах, и затем сконфигурируйте стиль линии и ширину линии для ErrorBar объект.

Возвратите состояние удержания осей к 'off' прежде, чем выйти из метода.

    methods(Access = protected)
        function setup(obj)
            ax = getAxes(obj);
            obj.BarObject = bar(ax,obj.XData,obj.YData);
            hold(ax,'on')
            obj.ErrorBarObject = errorbar(ax,obj.XData,obj.YData,obj.EData);
            obj.ErrorBarObject.LineStyle = 'none';
            obj.ErrorBarObject.LineWidth = 2;
            obj.ErrorBarObject.Color = [0.6 0.7 1];
            hold(ax,'off');
        end

Реализуйте update метод. В этом случае обновите x - и y - координаты и значения дельты на значении погрешности. Затем вызовите title функционируйте, чтобы обновить заголовок осей.

        function update(obj)
            % Update Bar and ErrorBar XData and YData
            obj.BarObject.XData = obj.XData;
            obj.BarObject.YData = obj.YData;
            obj.ErrorBarObject.XData = obj.XData;
            obj.ErrorBarObject.YData = obj.YData;
            
            % Update ErrorBar delta values
            obj.ErrorBarObject.YNegativeDelta = obj.EData;
            obj.ErrorBarObject.YPositiveDelta = obj.EData;
            
            % Update axes title
            ax = getAxes(obj);
            title(ax,obj.TitleText);
        end
    end

Реализуйте xlim метод, который вызывает xlim функционируйте, чтобы установить x - пределы по осям.

    methods
        % xlim method
        function varargout = xlim(obj,varargin)
            ax = getAxes(obj);
            [varargout{1:nargout}] = xlim(ax,varargin{:});
        end

Реализуйте ylim метод, который вызывает ylim функционируйте, чтобы установить y - пределы по осям.

        % ylim method
        function varargout = ylim(obj,varargin)
            ax = getAxes(obj);
            [varargout{1:nargout}] = ylim(ax,varargin{:});
        end

Реализуйте title метод, который устанавливает значение TextTitle свойство на графике.

        % title method
        function title(obj,txt)
            obj.TitleText = txt;
        end

Реализуйте set и get методы для XLimits'YLimits' , и соответствующие свойства режима.

        % set and get methods for XLimits and XLimitsMode
        function set.XLimits(obj,xlm)
            ax = getAxes(obj);
            ax.XLim = xlm;
        end
        function xlm = get.XLimits(obj)
            ax = getAxes(obj);
            xlm = ax.XLim;
        end
        function set.XLimitsMode(obj,xlmmode)
            ax = getAxes(obj);
            ax.XLimMode = xlmmode;
        end
        function xlm = get.XLimitsMode(obj)
            ax = getAxes(obj);
            xlm = ax.XLimMode;
        end
        
        % set and get methods for YLimits and YLimitsMode
        function set.YLimits(obj,ylm)
            ax = getAxes(obj);
            ax.YLim = ylm;
        end
        function ylm = get.YLimits(obj)
            ax = getAxes(obj);
            ylm = ax.YLim;
        end
        function set.YLimitsMode(obj,ylmmode)
            ax = getAxes(obj);
            ax.YLimMode = ylmmode;
        end
        function ylm = get.YLimitsMode(obj)
            ax = getAxes(obj);
            ylm = ax.YLimMode;
        end
    end
end

Смотрите также

Классы

Функции

Свойства

Похожие темы