Activación de las funciones de conveniencia para establecer las propiedades de los ejes
Cuando desarrolla una gráfica como una subclase de la clase ChartContainer
, considere habilitar algunas de las funciones de conveniencia de MATLAB® para establecer las propiedades en los ejes. Por ejemplo, puede diseñar la clase para que admita la función title
. Al habilitar las funciones de conveniencia, ofrece una experiencia de usuario coherente con las funciones de representación de MATLAB.
Compatibilidad con diferentes tipos de propiedades
El método con el que habilita una función de conveniencia varía en función de si la función controla una propiedad calculada o no calculada. En esta tabla se enumeran las funciones de conveniencia que puede admitir.
Función de conveniencia | Propiedades asociadas de los ejes | Tipo de propiedad |
---|---|---|
| No calculada | |
| No calculada | |
| Calculada | |
xticks , yticks , zticks |
| Calculada |
| Calculada | |
| Calculada |
Habilitar funciones para propiedades no calculadas
Las propiedades no calculadas son valores fijos. No cambian hasta que un usuario o el código las cambia de forma explícita.
Para habilitar una función de conveniencia para una propiedad no calculada, defina una propiedad pública en la clase que almacena el valor de la propiedad de los ejes que desea controlar. A continuación, defina un método público que tenga el mismo nombre y que admita la misma sintaxis de llamada que la función de conveniencia que desea admitir. Añada una línea de código al método que establece el valor de la propiedad. Por ejemplo, considere utilizar una clase que tenga una propiedad pública denominada TitleText
para almacenar el título. El siguiente código muestra el método title
de la clase.
function title(obj,txt) obj.TitleText = txt; end
A continuación, añada una línea de código al método update
que llama a la función de conveniencia de MATLAB para establecer las propiedades de los ejes correspondientes.
title(getAxes(obj),obj.TitleText);
Cuando lleve a cabo los pasos anteriores y guarde el archivo de clases, puede crear una instancia de la gráfica y llamar a la función title
para mostrar un título. Al hacer esto, activa la siguiente secuencia de llamada:
El método
title
de la clase establece la propiedadTitleText
, que marca la gráfica para su actualización.La próxima vez que
drawnow
se ejecute, el métodoupdate
se ejecuta y llama a la funcióntitle
de los ejes.La función
title
actualiza la propiedadTitle
de los ejes.
Habilitar funciones para propiedades calculadas
Los ejes controlan las propiedades calculadas. Los ejes recalculan sus valores en función del contenido de los ejes y de los datos subyacentes.
Para habilitar una función de conveniencia para una propiedad calculada, defina un método que tenga el mismo nombre y la misma sintaxis de llamada que la función de conveniencia que desea habilitar. Dentro del método, llame a la función de conveniencia y especifique los ejes como el primer argumento. Por ejemplo, para habilitar la función xlim
, defina un método denominado xlim
en la clase. Dado que la función xlim
acepta un número variable de argumentos de entrada, tiene que especificar varargin
como el segundo argumento de entrada. La función xlim
también admite un número variable de argumentos de salida, por lo que tiene que especificar [varargout{1:nargout}]
para admitir dichos argumentos.
function varargout = xlim(obj,varargin) ax = getAxes(obj); [varargout{1:nargout}] = xlim(ax,varargin{:}); end
Para proporcionar acceso a los valores de propiedad correspondientes de la gráfica, defina dos propiedades dependientes en la clase. La primera propiedad proporciona acceso al valor que controla la función de conveniencia. La otra propiedad proporciona acceso a la propiedad de modo, que indica cómo se controla la primera propiedad. La propiedad de modo puede tener el valor 'auto'
o 'manual'
. Defina estas propiedades como dependientes, de modo que la gráfica no almacene los valores. Los ejes controlan y almacenan estos valores. Por ejemplo, para proporcionar acceso a las propiedades XLim
y XLimMode
de los ejes, defina un par de propiedades dependientes denominadas XLimits
y XLimitsMode
.
properties (Dependent) XLimits (1,2) double XLimitsMode {mustBeMember(XLimitsMode,{'auto','manual'})} end
A continuación, defina los métodos set
y get
para cada propiedad dependiente. En cada método, establezca las propiedades de los ejes correspondientes. En el siguiente código se muestran los métodos set
y los métodos get
para las propiedades XLimits
y 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
Cuando lleve a cabo los pasos anteriores y guarde el archivo de clases, puede crear una instancia de la gráfica y llamar a la función xlim
para cambiar los límites del eje x de la gráfica. El método xlim
se ejecuta, que a su vez llama a la función xlim
para actualizar la propiedad XLim
de los ejes.
Nota
De forma predeterminada, MATLAB no almacena ningún cambio cuando el usuario llama a las funciones xlim
y ylim
. Para proporcionar soporte y conservar estos cambios cuando el usuario guarde y cargue la gráfica, consulte Guardar y cargar instancias de clases de gráficas.
Clase de gráficas que admite las funciones title
, xlim
y ylim
Este ejemplo muestra la manera de definir una clase de gráficas que admite las funciones title
, xlim
y ylim
. El siguiente código muestra la manera de:
Definir una propiedad
TitleText
e implementar un métodotitle
de manera que las instancias de la gráfica admitan la funcióntitle
.Implementar los métodos
xlim
yylim
de manera que las instancias de la gráfica admitan las funcionesxlim
yylim
.Definir las propiedades que permiten al usuario obtener y establecer los límites de los ejes x e y.
Combinar los objetos
Bar
yErrorBar
en una sola gráfica.
Para definir la clase, copie este código en el editor y guárdelo con el mismo nombre de BarErrorBarChart.m
en una carpeta grabable.
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
Después de guardar BarErrorBarChart.m
, cree una instancia de la gráfica.
BarErrorBarChart('XData',[1 2 3 4],'YData',[11 22 31 41],'EData',[2 2 2 2]);
Especifique un título llamando la función title
. Después acerque las tres últimas barras llamando a la función xlim
.
title('Top Three Contributors')
xlim([1.5 5])