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
varargincomo el último argumento de entrada para captar todos los argumentos de par nombre-valor de propiedad que el usuario especifique.Llame al constructor
ChartContainerantes 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,yymarginsegún los argumentos de par nombre-valor que el constructorChartContaineracepte y almacena los resultados enargs.Anexa todos los argumentos de par nombre-valor especificados por el usuario al final de
args.Pasa
argsal método constructorChartContainer.
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
endEjemplo: 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.
| Paso | Implementación |
|---|---|
Derive la clase a partir de la clase básica |
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 | 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 |
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 |
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','>');
