Main Content

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 convenienciaPropiedades asociadas de los ejesTipo de propiedad

title, subtitle

Title, Subtitle

No calculada

xlabel, ylabel, zlabel

XLabel, YLabel y ZLabel, respectivamente

No calculada

xlim, ylim, zlim

XLim, YLim y ZLim, respectivamente

Calculada

xticks, yticks, zticks

XTick, YTick y ZTick, respectivamente

Calculada

xticklabels, yticklabels, zticklabels

XTickLabel, YTickLabel y ZTickLabel, respectivamente

Calculada

view

View

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:

  1. El método title de la clase establece la propiedad TitleText, que marca la gráfica para su actualización.

  2. La próxima vez que drawnow se ejecute, el método update se ejecuta y llama a la función title de los ejes.

  3. La función title actualiza la propiedad Title 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 Guardado y carga de 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étodo title de manera que las instancias de la gráfica admitan la función title.

  • Implementar los métodos xlim y ylim de manera que las instancias de la gráfica admitan las funciones xlim y ylim.

  • Definir las propiedades que permiten al usuario obtener y establecer los límites de los ejes x e y.

  • Combinar los objetos Bar y ErrorBar 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])

Consulte también

Clases

Funciones

Propiedades

Temas relacionados