Когда вы разрабатываете график как подкласс ChartContainer
класс, рассмотрите включение некоторых функций удобства MATLAB® для установки свойств на осях. Например, можно спроектировать класс, чтобы поддержать title
функция. Путем включения функций удобства вы обеспечиваете пользовательский опыт, который сопоставим с функциями построения графика MATLAB.
Путем вы включаете функцию удобства, зависит от того, управляет ли функция невычисленным свойством или вычисленным свойством. Эта таблица приводит функции удобства, которые можно поддерживать.
Функция удобства | Связанное свойство осей | Тип свойства |
---|---|---|
| Невычисленный | |
| Невычисленный | |
| Вычисленный | |
xticks yticks палки |
| Вычисленный |
| Вычисленный | |
| Вычисленный |
Невычисленные свойства являются фиксированными значениями. Они не изменяются, пока пользователь или ваш код не изменяют их явным образом.
Чтобы включить функцию удобства для невычисленного свойства, задайте общественную собственность в своем классе, который хранит значение свойства осей, которым вы хотите управлять. Затем задайте открытый метод, который имеет то же имя и поддерживает те же синтаксисы вызова как функция удобства, которую вы хотите поддерживать. Добавьте строку кода в метод, который устанавливает значение свойства. Например, рассмотрите класс, который имеет общественную собственность под названием 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
Задайте BarErrorBarChart
класс для отображения графика, который содержит панели и значение погрешности, и также поддерживает title
xlim
, и ylim
функции.
Чтобы задать этот класс, создайте программный файл под названием BarErrorBarChart.m
в папке, которая находится на пути MATLAB. Затем реализуйте класс путем выполнения шагов в таблице. Для рабочей реализации этого класса смотрите Класс Графика Который заголовок Поддержек, xlim, и Функции ylim.
Шаг | Реализация |
---|---|
Выведите из |
classdef BarErrorBarChart < matlab.graphics.chartcontainer.ChartContainer |
Задайте публичные свойства. Включайте |
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 |
Задайте частные свойства. Одно свойство хранит |
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,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 |
Реализуйте |
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 |