Main Content

가변 개수의 선을 갖는 chart 클래스

이 예제에서는 사용자 데이터의 크기에 따라 임의 개수의 선을 표시할 수 있는 차트의 클래스를 정의하는 방법을 보여줍니다. 이 차트는 YData 행렬에 포함된 열의 개수만큼 선을 표시합니다. 각 선마다 차트는 국소 극값을 계산하고 해당 위치를 원형 마커로 나타냅니다. 아래의 코드는 다음 작업을 수행하는 방법을 보여줍니다.

  • 각각 선과 마커에 대한 객체를 저장하는 PlotLineArrayExtremaArray라는 2개의 속성을 정의합니다.

  • PlotLineArray 속성 및 ExtremaArray 속성의 내용을 새 객체로 대체하는 update 메서드를 구현합니다. 이 메서드는 모든 플로팅 및 구성 명령을 실행하기 때문에 setup 메서드는 비어 있습니다. 이는 임의 개수의 선을 만드는 간단한 방법입니다. 기존의 line 객체를 재사용하여 이 차트를 더 효율적으로 만드는 방법을 알아보려면 가변 개수의 선을 표시하도록 최적화된 chart 클래스 항목을 참조하십시오.

클래스를 정의하려면 다음 코드를 편집기에 복사하고 쓰기 가능한 폴더에 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;

참고 항목

클래스

관련 항목