Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

차트 개발 개요

plot, scatterbar와 같은 차트 함수를 사용하면 색 및 선 스타일과 같은 특성에 대한 기본적인 제어 기능을 통해 데이터를 신속하게 시각화할 수 있습니다. 사용자 지정 차트를 만들려면 여러 그래픽스 객체를 결합하거나 이러한 객체에 대한 속성을 설정하거나 추가 함수를 호출하면 됩니다. R2019a 및 이전 릴리스에서 사용자 지정 코드를 저장하고 이를 다른 사용자와 공유하는 일반적인 방법은 스크립트 또는 함수를 작성하는 것입니다.

R2019b부터 ChartContainer 기본 클래스의 서브클래스를 정의하여 차트에 대한 클래스 구현을 생성할 수 있습니다. 클래스를 만들면 다음과 같은 이점이 있습니다.

  • 사용자에게 편리한 인터페이스 제공 — 사용자가 이 차트의 특성을 사용자 지정하면 그래픽스 코드를 수정하고 다시 실행할 필요 없이 속성을 설정할 수 있습니다. 사용자는 명령줄에서 속성을 수정하거나 속성 인스펙터에서 속성을 검사할 수 있습니다.

  • 알고리즘 및 원시 그래픽스 객체 캡슐화 — 계산을 수행하고 기본 그래픽스 객체를 관리하는 메서드를 구현할 수 있습니다. 코드를 이 방식으로 구성하면 다른 사용자들로부터 구현에 대한 세부 정보를 숨길 수 있습니다.

이 기본 클래스에서 파생된 차트를 정의할 경우, 차트의 인스턴스는 해당 그래픽스 객체 계층 구조의 멤버가 됩니다. 그 결과 차트가 그래픽스 시스템의 여러 측면과 호환됩니다. 예를 들어, gca 함수와 findobj 함수는 차트의 인스턴스를 반환할 수 있습니다.

chart 클래스의 구조

chart 클래스의 첫 번째 라인은 matlab.graphics.chartcontainer.ChartContainer 클래스를 슈퍼클래스로 지정합니다. 예를 들어, ConfidenceChart라는 클래스의 첫 번째 라인은 다음과 같습니다.

classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer

슈퍼클래스를 지정하는 것 외에 다음 구성요소를 클래스 정의에 포함시킬 수 있습니다.

구성요소설명

퍼블릭 속성 블록
(권장)

이 블록은 사용자 액세스를 허용할 모든 속성을 정의합니다. 이러한 속성이 모여 차트의 사용자 인터페이스를 구성합니다.

프라이빗 속성 블록
(권장)

이 블록은 기본 그래픽스 객체와 사용자에게 액세스를 허용하지 않으려는 구현에 대한 기타 세부 정보를 저장합니다.

이 블록에서는 특성 값을 다음과 같이 설정합니다.

  • Access = private

  • Transient

  • NonCopyable

setup 메서드
(필수)

이 메서드는 차트의 초기 상태를 설정합니다. 이 메서드는 MATLAB®이 객체를 생성할 때 한 번 실행됩니다.

해당 클래스만 이 메서드를 실행할 수 있도록 보호 블록에 메서드를 정의합니다.

update 메서드
(필수)

이 메서드는 차트의 기본 객체를 업데이트합니다. 이 메서드는 사용자가 하나 이상의 속성값을 변경한 후 다음 drawnow가 실행되는 동안 실행됩니다.

setup 메서드와 동일한 보호 블록에 이 메서드를 정의합니다.

암시적 생성자 메서드

생성자는 ChartContainer 기본 클래스에서 상속되기 때문에 클래스에 대한 생성자 메서드를 작성할 필요가 없습니다. 생성자는 선택적 입력 인수, 즉 하나의 부모 컨테이너와 차트의 속성을 설정하기 위한 임의 개수의 이름-값 쌍의 인수를 받습니다. 예를 들어, 퍼블릭 속성 XDataYData를 갖는 ConfidenceChart라는 클래스를 정의할 경우 다음 명령 중 하나를 사용하여 클래스의 인스턴스를 만들 수 있습니다.

c = ConfidenceChart(gcf,'XData',[1 2 3],'YData',[4 5 6])
c = ConfidenceChart('XData',[1 2 3],'YData',[4 5 6])

일반 함수와 동일한 방식으로 입력 인수를 받는 인터페이스를 제공하려는 경우 사용자 지정 생성자 메서드를 정의하면 됩니다. 자세한 내용은 chart 클래스의 생성자 작성하기 항목을 참조하십시오.

퍼블릭 및 프라이빗 속성 블록

클래스 속성은 최소 두 개 블록으로 나눠질 수 있습니다.

  • 사용자 대상 인터페이스의 구성요소를 저장하는 퍼블릭 블록

  • 숨기고자 하는 구현 관련 세부 정보를 저장하는 프라이빗 블록

퍼블릭 블록에 포함되는 속성은 사용자가 제공하는 입력값을 저장합니다. 예를 들어, 선을 표시하는 차트는 두 개의 퍼블릭 속성에 x, y 좌표 벡터를 저장할 수 있습니다. 속성 이름-값 쌍의 인수는 암시적 생성자 메서드에 대한 선택적 입력값이므로 퍼블릭 속성을 디폴트 값으로 초기화하는 방법이 권장됩니다. 좌표값을 저장하는 퍼블릭 속성을 정의하는 경우 퍼블릭 속성을 NaN 값 또는 빈 배열로 초기화하면 사용자가 입력값 없이 생성자를 호출할 때 빈 차트가 생성됩니다.

프라이빗 블록에 포함되는 속성은 저장하고자 하는 계산된 값 외에 차트를 구성하는 기본 그래픽스 객체를 저장합니다. 결과적으로, 클래스는 퍼블릭 속성의 데이터를 사용하여 기본 객체를 구성합니다. 프라이빗 블록에 Transient 특성과 NonCopyable 특성을 포함시키면 사용자가 차트의 인스턴스를 복사하거나 저장하는 경우 중복된 정보가 저장되지 않게 됩니다.

예를 들어, 다음은 Line 객체 및 Patch 객체를 표시하는 차트의 속성 블록입니다. 퍼블릭 속성 블록은 선의 x, y 좌표, 신뢰 범위 값, 마커 기호, 색 값 등 사용자가 제어할 수 있는 값을 저장합니다. 프라이빗 속성 블록은 Line 객체 및 Patch 객체를 저장합니다.

properties
    XData = NaN
    YData = NaN
    ConfidenceMargin = 0.15
    MarkerSymbol = 'o'
    Color = [1 0 0]    
end
    
properties(Access = private,Transient,NonCopyable)
    LineObject
    PatchObject
end  

setup 메서드

setup 메서드는 MATLAB이 chart 객체를 생성할 때 한 번 실행됩니다. 이름-값 쌍의 인수로 생성자 메서드에 전달된 속성값은 모두 이 메서드가 실행된 후 할당됩니다.

setup 메서드를 사용하면 다음을 수행할 수 있습니다.

  • 플로팅 함수를 호출하여 차트에 사용할 원시 그래픽스 객체를 만들 수 있습니다.

  • 플로팅 함수에서 반환되는 원시 객체를 chart 객체의 프라이빗 속성으로 저장할 수 있습니다.

  • 원시 그래픽스 객체를 구성할 수 있습니다.

  • 좌표축을 구성할 수 있습니다.

대부분의 그래픽스 함수에는 대상 axes 객체를 지정하는 데 사용할 수 있는 선택적 입력 인수가 있습니다. 이러한 함수로는 플로팅 함수(예: plot, scatterbar)와 좌표축을 수정하는 함수(예: hold, gridtitle)가 있습니다. 클래스 메서드 내에서 이러한 유형의 함수를 호출할 때는 대상 axes 객체를 지정해야 합니다. getAxes 메서드를 호출하여 axes 객체에 액세스할 수 있습니다. 이 메서드는 axes 객체를 반환하거나, 차트에 아직 axes 객체가 포함되어 있지 않은 경우 카테시안 axes 객체를 만듭니다.

주의

대상 좌표축을 지정하지 않고 플로팅 함수나 좌표축을 수정하는 함수를 호출하면 예기치 않은 결과가 생성될 수 있습니다.

setup 메서드에서 플로팅 함수를 호출할 때 좌표 데이터에 대해 임시 값(예: NaN)을 지정하십시오. 또한, 클래스의 퍼블릭 속성에 대응하는 다른 인수에 대해서도 임시 값을 지정하십시오. 그렇게 하면 setup 메서드와 update 메서드 모두에 동일한 속성값이 설정되지 않도록 할 수 있습니다.

좌표축에 여러 개의 원시 객체를 표시하려면 각각의 플로팅 명령 사이에 hold 함수를 호출하십시오. 마지막 플로팅 명령을 실행한 후에는 유지 상태를 다시 'off'로 설정하십시오.

예를 들어, 선과 패치를 표시하는 차트가 있다고 가정해 보겠습니다. 이 차트는 다음 속성을 갖습니다.

  • 선의 x, y 좌표를 저장하는 XDataYData라는 2개의 퍼블릭 속성

  • LineObjectPatchObject라는 2개의 프라이빗 속성

setup 메서드는 getAxes 메서드를 호출하여 axes 객체를 가져옵니다. 그런 다음 patch 함수를 호출하고 출력값을 PatchObject 속성에 저장합니다. 코드의 다음 라인은 plot 함수를 호출하여 LineObject 속성을 만들기 전에 좌표축의 유지 상태를 'on'으로 설정합니다. 코드의 마지막 줄에서 좌표축의 유지 상태를 다시 'off'로 설정합니다.

function setup(obj)
    % Get the axes
    ax = getAxes(obj);
            
    % Create Patch and Line objects
    obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,...
        'EdgeColor','none');
    hold(ax,'on')
    obj.LineObject = plot(ax,NaN,NaN);
            
    % Turn hold state off
    hold(ax,'off')
end

update 메서드

사용자가 chart 객체에 대한 속성값을 하나 이상 변경할 경우 MATLAB은 chart 객체를 업데이트 대상으로 표시합니다. update 메서드는 setup 메서드가 실행된 후 처음으로 실행됩니다. 그런 후에는 다음에 drawnow가 실행될 때 실행됩니다. drawnow 함수는 사용자 MATLAB 세션의 그래픽스 환경 상태를 기준으로 주기적으로 자동으로 실행됩니다. 따라서 속성값을 변경하고 이러한 변경의 결과가 표시되기까지 지연이 발생할 수 있습니다.

update 메서드를 사용하면 퍼블릭 속성의 새 값을 기준으로 차트의 기본 그래픽스 객체를 재구성할 수 있습니다. 일반적으로 이 메서드는 어떤 퍼블릭 속성이 변경되었는지 구분하지 않습니다. 이 메서드는 퍼블릭 속성에 종속되는 기본 그래픽스 객체의 모든 특성을 재구성합니다.

예를 들어, 다음 속성을 갖는 차트가 있다고 가정해 보겠습니다.

  • XDataColor라는 2개의 퍼블릭 속성

  • LineObjectPatchObject라는 2개의 프라이빗 속성

update 메서드는 Line 객체 및 Patch 객체의 XData 속성과 Color 속성을 업데이트합니다.

function update(obj)
            
    % Update XData of line object
    obj.LineObject.XData = obj.XData;
            
    % Update patch XData 
    x = obj.XData;
    obj.PatchObject.XData = [x x(end:-1:1)];
            
    % Update line object colors
    obj.LineObject.Color = obj.Color;
    obj.PatchObject.FaceColor = obj.Color;
           
end

예제: 신뢰한계 차트

이 예제에서는 신뢰한계를 갖는 선을 플로팅하기 위해 차트를 만드는 방법을 다룹니다. MATLAB 경로에 있는 폴더에 ConfidenceChart.m이라는 클래스 정의 파일을 만드십시오. 다음 단계를 따라 클래스를 정의하십시오.

단계구현

ChartContainer 기본 클래스에서 파생시킵니다.

classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer

퍼블릭 속성을 정의합니다.

    properties
        XData = NaN
        YData = NaN
        ConfidenceMargin = 0.15
        MarkerSymbol = 'o'
        Color = [1 0 0]
    end

프라이빗 속성을 정의합니다.

    properties(Access = private,Transient,NonCopyable)
        LineObject
        PatchObject
    end

setup 메서드를 구현합니다. 이 경우, plot 함수와 patch 함수를 각각 호출하여 Patch 객체와 Line 객체를 만듭니다. 대응하는 프라이빗 속성에 이 객체를 저장합니다.

메서드를 종료하기 전에 좌표축의 유지 상태를 'off'로 다시 전환합니다.

    methods(Access = protected)
        function setup(obj)
            % get the axes
            ax = getAxes(obj);

            % Create Patch and Line objects
            obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,...
                'EdgeColor','none');
            hold(ax,'on')
            obj.LineObject = plot(ax,NaN,NaN);

            % Turn hold state off
            hold(ax,'off')
        end

update 메서드를 구현합니다. 이 경우, 기본 객체의 x, y 좌표, 색 및 마커 기호를 업데이트합니다.

        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

다음으로, 몇 개의 퍼블릭 속성을 사용하여 암시적 생성자 메서드를 호출함으로써 차트의 인스턴스를 만듭니다.

x = 0:0.2:10;
y = besselj(0,x);
c = ConfidenceChart('XData',x,'YData',y,'ConfidenceMargin',0.15);

색을 변경합니다.

c.Color = [0 0 1];

도움말 문서에 제공된 예제 외에, MATLAB Central™File Exchange에서 커뮤니티에서 작성한 다양한 예제를 찾을 수 있습니다.

공통 그래픽스 기능 지원

기본적으로, 차트의 인스턴스는 모든 MATLAB 차트에 공통된 대부분의 기능을 지원합니다. 예를 들어, gca 함수와 findobj 함수는 차트의 인스턴스를 반환할 수 있습니다. 또한 차트의 인스턴스를 set 함수와 get 함수에 전달할 수 있으며 속성 인스펙터에서 차트의 속성을 구성할 수 있습니다.

이 표에 설명되어 있는 기능은 차트에 대해 활성화된 경우에만 지원됩니다.

기능설명추가 정보
legend 객체

Figure 도구 모음에서 legend 함수와 범례 툴을 활성화합니다.

matlab.graphics.chartcontainer.mixin.Legend
colorbar 객체

Figure 도구 모음에서 colorbar 함수와 컬러바 툴을 활성화합니다.

matlab.graphics.chartcontainer.mixin.Colorbar
여러 유형의 좌표축 또는 여러 개의 좌표축

카테시안 플롯, 극좌표 플롯 또는 지리 플롯을 하나 이상 표시합니다.

극좌표 좌표축, 지리 좌표축 또는 여러 개의 좌표축을 사용하여 차트 개발하기
함수

title, xlim, ylim 함수와 같이 좌표축의 속성을 설정하는 함수를 활성화합니다.

axes 속성을 설정하는 편의 함수 활성화하기
저장 및 불러오기

사용자가 차트를 저장하고 MATLAB에 다시 불러올 때 차트의 상태를 복원할 수 있도록 사용자가 차트와 상호 작용한 후 변경 사항을 저장합니다.

chart 클래스의 인스턴스 저장하고 불러오기

참고 항목

클래스

함수

속성

관련 항목