При разработке диаграммы как подкласса ChartContainer рассмотрите возможность включения некоторых функций удобства MATLAB ® для установки свойств на осях. Например, можно разработать класс для поддержки title функция. С помощью удобных функций обеспечивается удобство работы пользователя, соответствующее функциям печати MATLAB.
Способ включения функции удобства зависит от того, управляет ли функция нерасчетным свойством или вычисленным свойством. В этой таблице перечислены функции удобства, которые можно поддерживать.
| Функция удобства | Свойство «Связанные оси» | Тип свойства |
|---|---|---|
| Невычисленный | |
| Невычисленный | |
| Вычисленный | |
xticks, yticks, zticks |
| Вычисленный |
| Вычисленный | |
| Вычисленный |
Нерасчетные свойства являются фиксированными значениями. Они не изменяются до тех пор, пока пользователь или код не изменят их явным образом.
Чтобы включить функцию удобства для нерасчетного свойства, определите в классе общедоступное свойство, которое хранит значение свойства axes, которым необходимо управлять. Затем определите общедоступный метод, который имеет то же имя и поддерживает те же синтаксисы вызова, что и поддерживаемая функция удобства. Добавьте строку кода к методу, задающему значение свойства. Например, рассмотрим класс с общим свойством, называемым TitleText для хранения заголовка. Следующий код показывает title метод для класса.
function title(obj,txt) obj.TitleText = txt; end
Затем добавьте строку кода к update метод, вызывающий функцию удобства MATLAB для установки соответствующего свойства оси.
title(getAxes(obj),obj.TitleText);
После выполнения предыдущих шагов и сохранения файла класса можно создать экземпляр диаграммы и вызвать title для отображения заголовка. При этом инициируется следующая последовательность вызовов:
title метод на установках класса TitleText , которое помечает диаграмму для обновления.
В следующий раз drawnow выполняется, update метод выполняет и вызывает title функция на осях.
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
Чтобы предоставить доступ к соответствующим значениям свойств на диаграмме, определите два зависимых свойства для класса. Первое свойство предоставляет доступ к значению, управляемому функцией удобства. Другое свойство обеспечивает доступ к свойству mode, которое указывает способ управления первым свойством. Свойство mode может иметь значение '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 функции. Сведения о поддержке сохранения этих изменений при сохранении и загрузке диаграммы см. в разделе Сохранение и загрузка экземпляров классов диаграмм.
title, xlim, и ylim ФункцииВ этом примере показано, как определить класс диаграмм, который поддерживает title, xlim, и ylim функции. Следующий код демонстрирует, как:
Определение TitleText свойство и реализация title чтобы экземпляры диаграммы поддерживали title функция.
Реализация xlim и ylim чтобы экземпляры диаграммы поддерживали xlim и ylim функции.
Определите свойства, позволяющие пользователю получать и устанавливать пределы по осям X и Y.
Объединиться 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])
