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

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

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

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

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

title, subtitle

Title, Subtitle

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

xlabel, ylabel, zlabel

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

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

xlim, ylim, zlim

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

Вычисленный

xticks, yticks, zticks

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

Вычисленный

xticklabels, yticklabels, zticklabels

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 Функции

В этом примере показано, как задать класс графиков, который поддерживает titlexlim , и ylim функции. Следующий код демонстрирует как к:

  • Задайте TitleText свойство и реализация title метод так, чтобы экземпляры графика поддержали title функция.

  • Реализуйте xlim и ylim методы так, чтобы экземпляры графика поддержали xlim и ylim функции.

  • Задайте свойства, которые позволяют пользователю получать и устанавливать пределы оси Y и x-.

  • Объедините Bar и ErrorBar объекты в сингл чарт.

Чтобы задать класс, скопируйте этот код в редактор и сохраните его с именем BarErrorBarChart.m в перезаписываемой папке.

classdef BarErrorBarChart < matlab.graphics.chartcontainer.ChartContainer
    properties
        XData (1,:) double = NaN
        YData (1,:) double = NaN
        EData (1,:) double = NaN
        TitleText (:,:) char = ''
    end
    properties (Dependent)
        % Provide properties to support setting & getting
        XLimits (1,2) double
        XLimitsMode {mustBeMember(XLimitsMode,{'auto','manual'})}
        YLimits (1,2) double
        YLimitsMode {mustBeMember(YLimitsMode,{'auto','manual'})}
    end
    properties (Access = private)
        BarObject (1,1) matlab.graphics.chart.primitive.Bar
        ErrorBarObject (1,1) matlab.graphics.chart.primitive.ErrorBar
    end
    
    methods(Access = protected)
        function setup(obj)
            ax = getAxes(obj);
            obj.BarObject = bar(ax,NaN,NaN);
            hold(ax,'on')
            obj.ErrorBarObject = errorbar(ax,NaN,NaN,NaN);
            obj.ErrorBarObject.LineStyle = 'none';
            obj.ErrorBarObject.LineWidth = 2;
            obj.ErrorBarObject.Color = [0.6 0.7 1];
            hold(ax,'off');
        end
        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
    
    methods
        % xlim method
        function varargout = xlim(obj,varargin)
            ax = getAxes(obj);
            [varargout{1:nargout}] = xlim(ax,varargin{:});
        end
        % ylim method
        function varargout = ylim(obj,varargin)
            ax = getAxes(obj);
            [varargout{1:nargout}] = ylim(ax,varargin{:});
        end
        % title method
        function title(obj,txt)
            obj.TitleText = txt;
        end
        
        % 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

После сохранения BarErrorBarChart.m, создайте экземпляр графика.

BarErrorBarChart('XData',[1 2 3 4],'YData',[11 22 31 41],'EData',[2 2 2 2]);

Задайте заголовок путем вызова title функция. Затем масштабируйте в последние три панели путем вызова xlim функция.

title('Top Three Contributors')
xlim([1.5 5])

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

Классы

Функции

Свойства

Похожие темы