Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ライン数が可変のチャート クラス

この例では、ユーザーのデータのサイズに基づいて任意数のラインを表示できるチャート クラスの定義方法を説明します。チャートは、YData 行列にある列と同数のラインを表示します。それぞれのラインについて、チャートは局所的極値を計算し、それらの場所を円マーカーで示します。下記のコードは、以下を行う方法を示したものです。

  • ラインとマーカー用のオブジェクトをそれぞれ格納する、PlotLineArray および ExtremaArray という 2 つのプロパティを定義する。

  • PlotLineArray プロパティと ExtremaArray プロパティの内容を新しいオブジェクトに置き換える update メソッドを実装する。このメソッドがすべてのプロット コマンドと構成コマンドを実行するため、setup メソッドは空です。

この例は、チャート作成のコーディング手法に習熟するために使用するか、または作成予定のクラスの基礎として使用できます。

クラスを定義するために、次のコードをエディターにコピーし、LocalExtremaChart.m という名前で書き込み可能なフォルダーに保存します。

classdef LocalExtremaChart < matlab.graphics.chartcontainer.ChartContainer
    
    properties
        XData (1,:) double = NaN
        YData (:,:) double = NaN
        MarkerColor (1,3) double {mustBeGreaterThanOrEqual(MarkerColor,0),...
            mustBeLessThanOrEqual(MarkerColor,1)} = [1 0 0]
        MarkerSize (1,1) double = 5
    end
    properties(Access = private,Transient,NonCopyable)
        PlotLineArray (:,1) matlab.graphics.chart.primitive.Line
        ExtremaArray (:,1) matlab.graphics.chart.primitive.Line
    end
    
    methods(Access = protected)
        function setup(~)
        end
        function update(obj)
            % get the axes
            ax = getAxes(obj);
            
            % Plot Lines and the local extrema
            obj.PlotLineArray = plot(ax,obj.XData,obj.YData);
            hold(ax,'on')
            
            % Replicate x-coordinate vectors to match size of YData
            newx = repmat(obj.XData(:),1,size(obj.YData,2));
            
            % Find local minima and maxima and plot markers
            tfmin = islocalmin(obj.YData,1);
            tfmax = islocalmax(obj.YData,1);
            obj.ExtremaArray = plot(ax,newx(tfmin),obj.YData(tfmin),'o',...
                newx(tfmax),obj.YData(tfmax),'o',...
                'MarkerEdgeColor',obj.MarkerColor,...
                'MarkerFaceColor',obj.MarkerColor,...
                'MarkerSize',obj.MarkerSize);
            hold(ax,'off')
        end
    end
end

クラス ファイルを保存した後は、チャートのインスタンスを作成できます。以下に例を示します。

x = linspace(0,3);
y1 = cos(5*x)./(1+x.^2);
y2 = -cos(5*x)./(1+x.^3);
y3 = sin(x)./2;
y = [y1' y2' y3'];
c = LocalExtremaChart('XData',x,'YData',y);

マーカー サイズを 8 に変更します。

c.MarkerSize = 8;

参考

クラス

関連するトピック