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