Когда вы разрабатываете график как подкласс 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])