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
ymargin
según los argumentos de par nombre-valor que el constructorChartContainer
acepte y almacena los resultados enargs
.Anexa todos los argumentos de par nombre-valor especificados por el usuario al final de
args
.Pasa
args
al 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 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.
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','>');