Main Content

Escribir constructores para clases de gráficas

Cuando se desarrolla una gráfica como una subclase de la clase básica ChartContainer, la clase básica proporciona un constructor predeterminado que acepta argumentos de par nombre-valor opcionales para definir las propiedades de la gráfica. Por ejemplo, este comando crea una instancia de una clase denominada ConfidenceChart.

ConfidenceChart('XData',x,'YData',y,'ConfidenceMargin',0.15,'Color',[1 0 0])

Al escribir un método constructor personalizado, se puede proporcionar una interfaz que acepta valores de argumentos individuales y argumentos de par nombre-valor opcionales. Por ejemplo, se puede diseñar un constructor personalizado para cambiar la sintaxis de llamada para ConfidenceChart, de manera que ambos comandos son maneras válidas de crear la gráfica:

ConfidenceChart(x,y,0.15)
ConfidenceChart(x,y,0.15,'Color',[1 0 0])

Al escribir el método constructor:

  • Especifique los argumentos de entrada que desee que sean compatibles en la declaración de la función. Incluya varargin como el último argumento de entrada para captar todos los argumentos de par nombre-valor de propiedad que el usuario especifique.

  • Llame al constructor ChartContainer antes que al resto de referencias al objeto de gráfica.

Por ejemplo, el siguiente método constructor de la clase ConfidenceChart realiza estas tareas:

  • Comprueba el número de argumentos de entrada y devuelve un error si el número es inferior a tres.

  • Convierte los valores x, y y margin según los argumentos de par nombre-valor que el constructor ChartContainer acepte y almacena los resultados en args.

  • Anexa todos los argumentos de par nombre-valor especificados por el usuario al final de args.

  • Pasa args al método constructor ChartContainer.

methods
    function obj = ConfidenceChart(x,y,margin,varargin)
        % Check for at least three inputs
        if nargin < 3
            error('Not enough inputs');
        end
            
        % Convert x, y, and margin into name-value pairs
        args = {'XData', x, 'YData', y, 'ConfidenceMargin', margin};
            
        % Combine args with user-provided name-value pairs
        args = [args varargin];
            
        % Call superclass constructor method
        obj@matlab.graphics.chartcontainer.ChartContainer(args{:});
    end
end

Ejemplo: Gráfica con límites de confianza y constructor personalizado

Este ejemplo muestra cómo desarrollar una gráfica que cuente con un constructor personalizado que acepte argumentos de entrada de valor único y argumentos de par nombre-valor opcionales. La gráfica representa una línea con marcadores y un margen de confianza alrededor.

Cree un archivo de programa denominado ConfidenceChart.m en una carpeta que se encuentre en la ruta de MATLAB®. Defina la clase siguiendo estos pasos.

PasoImplementación

Derive la clase a partir de la clase básica ChartContainer.

classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer

Defina las propiedades públicas.

    properties
        XData (1,:) double = NaN
        YData (1,:) double = NaN
        ConfidenceMargin (1,1) double = 0.15
        MarkerSymbol (1,:) char = 'o'
        Color (1,3) double {mustBeGreaterThanOrEqual(Color,0),...
            mustBeLessThanOrEqual(Color,1)} = [1 0 0]
    end

Defina las propiedades privadas.

    properties(Access = private,Transient,NonCopyable)
        LineObject (1,1) matlab.graphics.chart.primitive.Line
        PatchObject (1,1) matlab.graphics.primitive.Patch
    end

Implemente el método constructor personalizado que acepte los valores x, y y margin y los argumentos de par nombre-valor de propiedad opcionales.

    methods
        function obj = ConfidenceChart(x,y,margin,varargin)
            % Check for at least three inputs
            if nargin < 3
                error('Not enough inputs');
            end
            
            % Convert x, y, and margin into name-value pairs
            args = {'XData', x, 'YData', y, 'ConfidenceMargin', margin};
            
            % Combine args with user-provided name-value pairs.
            args = [args varargin];
            
            % Call superclass constructor method
            obj@matlab.graphics.chartcontainer.ChartContainer(args{:});
        end
    end

Implemente el método setup.

    methods(Access = protected)
        function setup(obj)
            % get the axes
            ax = getAxes(obj);
            
            % Create Patch and objects
            obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,...
                'EdgeColor','none');
            hold(ax,'on')
            obj.LineObject = plot(ax,NaN,NaN);
            hold(ax,'off')
        end

Implemente el método update.

        function update(obj)
            % Update XData and YData of Line
            obj.LineObject.XData = obj.XData;
            obj.LineObject.YData = obj.YData;
            
            % Update patch XData and YData
            x = obj.XData;
            obj.PatchObject.XData = [x x(end:-1:1)];
            y = obj.YData;
            c = obj.ConfidenceMargin;
            obj.PatchObject.YData = [y+c y(end:-1:1)-c];
            
            % Update colors
            obj.LineObject.Color = obj.Color;
            obj.PatchObject.FaceColor = obj.Color;
            
            % Update markers
            obj.LineObject.Marker = obj.MarkerSymbol;
        end
    end
end

A continuación, cree una instancia de ConfidenceChart. Especifique las coordenadas x e y, el valor de margen y un símbolo de marcador.

x = 0:0.2:10;
y = besselj(0,x);
ConfidenceChart(x,y,0.20,'MarkerSymbol','>');

Consulte también

Clases

Funciones

Propiedades

Temas relacionados