Когда вы разрабатываете график как подкласс 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
функционируйте, чтобы отобразить заголовок. Выполнение так инициировало эту вызывающую последовательность:
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
Чтобы обеспечить доступ к соответствующим значениям свойств на вашем графике, задайте два зависимых свойства на своем классе. Первое свойство обеспечивает доступ к значению, что удобство функционирует средства управления. Другое свойство обеспечивает доступ к свойству режима, которое указывает, как первым свойством управляют. Свойство режима может иметь значение '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
функции.
Задайте свойства, которые позволяют пользователю получать и устанавливать пределы оси 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])