Main Content

チャート クラスのコンストラクターの作成

チャートを ChartContainer 基底クラスのサブクラスとして作成する場合、基底クラスは、チャート プロパティの設定に用いるオプションの名前と値のペアの引数を受け入れる既定のコンストラクターを提供します。たとえば、次のコマンドは ConfidenceChart というクラスのインスタンスを作成します。

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

カスタム コンストラクター メソッドを作成することにより、個々の引数値およびオプションの名前と値のペアの引数を受け入れるインターフェイスを提供することができます。たとえば、カスタム コンストラクターを設計して ConfidenceChart の呼び出し構文を変更し、次のコマンドがいずれもチャート作成の有効な方法となるようにできます。

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

コンストラクター メソッドを作成する際には、以下を行います。

  • 関数宣言で、サポート対象とする入力引数を指定する。varargin を最後の入力引数として含め、ユーザーの指定するプロパティの名前と値のペアの引数をすべて取得します。

  • チャート オブジェクトへの他のすべての参照より前に ChartContainer コンストラクターを呼び出す。

たとえば、ConfidenceChart クラスの下記のコンストラクター メソッドは、次のタスクを実行します。

  • 入力引数の数を確認し、数が 3 未満であればエラーを返す。

  • xymargin の値を ChartContainer コンストラクターが受け入れる名前と値のペアの引数に変換し、結果を args に保存する。

  • ユーザー指定の名前と値のペアの引数をすべて args の最後に追加する。

  • argsChartContainer コンストラクター メソッドに渡す。

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

例: カスタム コンストラクターをもつ信頼限界チャート

この例では、単一値の入力引数およびオプションとして名前と値のペアの引数を受け入れるカスタム コンストラクターをもったチャートの作成方法を説明します。チャートでは、ラインを、マーカーおよび周囲の信頼余裕とともにプロットします。

MATLAB® パス上にあるフォルダー内に ConfidenceChart.m というプログラム ファイルを作成します。以下の手順に従ってクラスを定義します。

手順実装

ChartContainer 基底クラスから派生させます。

classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer

パブリック プロパティを定義します。

    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

プライベート プロパティを定義します。

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

xymargin の値と、オプションのプロパティ名と値のペアの引数を受け入れるカスタム コンストラクター メソッドを実装します。

    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

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

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

次に、ConfidenceChart のインスタンスを作成します。x 座標と y 座標、余裕の値、およびマーカー記号を指定します。

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

参考

クラス

関数

プロパティ

関連するトピック