ライン数が可変のチャート クラス
この例では、ユーザーのデータのサイズに基づいて任意数のラインを表示できるチャート クラスの定義方法を説明します。チャートは、YData
行列にある列と同数のラインを表示します。それぞれのラインについて、チャートは局所的極値を計算し、それらの場所を円マーカーで示します。下記のコードは、以下を行う方法を示したものです。
ラインとマーカー用のオブジェクトをそれぞれ格納する、
PlotLineArray
およびExtremaArray
という 2 つのプロパティを定義する。PlotLineArray
プロパティとExtremaArray
プロパティの内容を新しいオブジェクトに置き換えるupdate
メソッドを実装する。このメソッドがすべてのプロット コマンドと構成コマンドを実行するため、setup
メソッドは空です。これは任意数のラインを作成する簡単な方法です。既存の line オブジェクトを再利用してこのチャートをより効率的に作成する方法については、可変数のラインを表示する最適化されたチャート クラスを参照してください。
クラスを定義するために、次のコードをエディターにコピーし、LocalExtremaChart.m
という名前で書き込み可能なフォルダーに保存します。
classdef LocalExtremaChart < matlab.graphics.chartcontainer.ChartContainer % c = LocalExtremaChart('XData',X,'YData',Y,Name,Value,...) % plots one line with markers at local extrema for every column of matrix Y. % You can also specify the additonal name-value arguments, 'MarkerColor' % and 'MarkerSize'. properties XData (1,:) double = NaN YData (:,:) double = NaN MarkerColor {validatecolor} = [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','none',... '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;