Main Content

axes 속성을 설정하는 편의 함수 활성화하기

차트를 ChartContainer 클래스의 서브클래스로 개발할 때 좌표축에 대한 속성을 설정하는 MATLAB® 편의 함수 중 일부를 활성화하는 것이 좋습니다. 예를 들어, title 함수를 지원하도록 클래스를 설계할 수 있습니다. 편의 함수를 활성화하면 MATLAB 플로팅 함수와 일치하는 사용자 경험을 제공할 수 있습니다.

여러 유형의 속성 지원

편의 함수를 활성화하는 방법은 함수가 계산되지 않는 속성을 제어하는지 아니면 계산되는 속성을 제어하는지에 따라 달라집니다. 다음 표에는 지원할 수 있는 편의 함수가 나와 있습니다.

편의 함수연관 axes 속성속성 유형

title, subtitle

Title, Subtitle

계산되지 않음

xlabel, ylabel, zlabel

XLabel, YLabel, ZLabel

계산되지 않음

xlim, ylim, zlim

XLim, YLim, ZLim

계산됨

xticks, yticks, zticks

XTick, YTick, ZTick

계산됨

xticklabels, yticklabels, zticklabels

XTickLabel, YTickLabel, ZTickLabel

계산됨

view

View

계산됨

계산되지 않는 속성에 대해 함수 활성화하기

계산되지 않는 속성은 고정 값입니다. 이 값은 사용자 또는 코드가 명시적으로 변경할 때까지 변경되지 않습니다.

계산되지 않는 속성에 대해 편의 함수를 활성화하려면 제어하려는 axes 속성의 값을 저장하는 클래스에 퍼블릭 속성을 정의하십시오. 그런 다음, 지원하려는 편의 함수와 동일한 이름을 갖고 동일한 호출 구문을 지원하는 퍼블릭 메서드를 정의합니다. 이 메서드에 속성값을 설정하는 코드를 한 줄 추가합니다. 예를 들어, 제목을 저장하는 TitleText라는 퍼블릭 속성을 가진 클래스가 있다고 가정해 보겠습니다. 다음 코드에서는 이 클래스에 대한 title 메서드를 보여줍니다.

function title(obj,txt) 
       obj.TitleText = txt;
end

다음으로, 대응하는 axes 속성을 설정하는 MATLAB 편의 함수를 호출하는 코드를 update 메서드에 한 줄 추가합니다.

title(getAxes(obj),obj.TitleText);

이전 단계를 수행하고 클래스 파일을 저장하고 나면 차트의 인스턴스를 만들고 title 함수를 호출하여 제목을 표시할 수 있습니다. 이렇게 하면 다음 호출 시퀀스가 트리거됩니다.

  1. 이 클래스의 title 메서드는 업데이트할 차트를 표시하는 TitleText 속성을 설정합니다.

  2. update 메서드는 다음에 drawnow가 실행될 때 실행되고 좌표축에 대한 title 함수를 호출합니다.

  3. title 함수는 좌표축에 대한 Title 속성을 업데이트합니다.

계산되는 속성에 대해 함수 활성화하기

계산되는 속성은 좌표축에 의해 제어됩니다. 좌표축은 좌표축의 내용과 기본 데이터에 따라 이 값을 재계산합니다.

계산되는 속성에 대해 편의 함수를 활성화하려면 활성화하려는 편의 함수와 동일한 이름과 호출 구문을 갖는 메서드를 정의하십시오. 해당 메서드 내에서 편의 함수를 호출하고 첫 번째 인수로 좌표축을 지정합니다. 예를 들어, xlim 함수를 활성화하려면 클래스에 xlim이라는 메서드를 정의하십시오. xlim 함수는 가변 개수의 입력 인수를 받으므로 두 번째 입력 인수로 varargin을 지정해야 합니다. xlim 함수는 가변 개수의 출력 인수도 지원하므로 이러한 인수를 지원하도록 [varargout{1:nargout}]을 지정해야 합니다.

function varargout = xlim(obj,varargin) 
    ax = getAxes(obj);
    [varargout{1:nargout}] = xlim(ax,varargin{:});
end

차트에서 대응하는 속성값에 대한 액세스를 제공하려면 클래스에 대해 두 개의 종속 속성을 정의하십시오. 첫 번째 속성은 편의 함수가 제어하는 값에 대한 액세스를 제공합니다. 다른 속성은 첫 번째 속성이 제어되는 방법을 나타내는 모드 속성에 대한 액세스를 제공합니다. 모드 속성은 값 'auto' 또는 'manual'을 가질 수 있습니다. 차트가 값을 저장하지 않도록 이 속성을 종속 속성으로 정의합니다. 좌표축은 이러한 값을 제어하고 저장합니다. 예를 들어, 좌표축에 대해 XLim 속성과 XLimMode 속성에 대한 액세스를 제공하려면 XLimitsXLimitsMode라는 종속 속성 쌍을 정의하십시오.

properties (Dependent)
    XLimits (1,2) double
    XLimitsMode {mustBeMember(XLimitsMode,{'auto','manual'})}
end

다음으로, 각 종속 속성에 대해 set 메서드 및 get 메서드를 정의합니다. 각 메서드 내에서 대응하는 axes 속성을 설정합니다. 다음 코드에서는 XLimits 속성 및 XLimitsMode 속성에 대한 set 메서드 및 get 메서드를 보여줍니다.

function set.XLimits(obj,xlm)
    ax = getAxes(obj);
    ax.XLim = xlm;
end
function xlm = get.XLimits(obj)
    ax = getAxes(obj);
    xlm = ax.XLim;
end
function set.XLimitsMode(obj,xlmmode)
    ax = getAxes(obj);
    ax.XLimMode = xlmmode;
end
function xlm = get.XLimitsMode(obj)
    ax = getAxes(obj);
    xlm = ax.XLimMode;
end

이전 단계를 수행하고 클래스 파일을 저장하고 나면 차트의 인스턴스를 만들고 xlim 함수를 호출하여 차트에서 x축 제한을 변경할 수 있습니다. xlim 메서드가 실행되고, 이 메서드는 xlim 함수를 호출하여 좌표축에 대한 XLim 속성을 업데이트합니다.

참고

기본적으로 MATLAB은 사용자가 xlim 함수 및 ylim 함수를 호출할 때 어떠한 변경 사항도 저장하지 않습니다. 사용자가 차트를 저장하고 불러올 때 이러한 변경 사항을 유지하도록 지원하려면 chart 클래스의 인스턴스 저장하고 불러오기 항목을 참조하십시오.

title, xlim, ylim 함수를 지원하는 chart 클래스

이 예제에서는 title, xlim, ylim 함수를 지원하는 차트의 클래스를 정의하는 방법을 보여줍니다. 아래의 코드는 다음 작업을 수행하는 방법을 보여줍니다.

  • TitleText 속성을 정의하고 title 메서드를 구현하여 차트의 인스턴스가 title 함수를 지원하도록 합니다.

  • xlim 메서드 및 ylim 메서드를 구현하여 차트의 인스턴스가 xlim 함수 및 ylim 함수를 지원하도록 합니다.

  • 사용자가 x축 제한 및 y축 제한을 가져오고 설정할 수 있도록 허용하는 속성을 정의합니다.

  • Bar 객체와 ErrorBar 객체를 단일 차트로 결합합니다.

클래스를 정의하려면 다음 코드를 편집기에 복사하고 쓰기 가능한 폴더에 BarErrorBarChart.m이라는 이름으로 저장하십시오.

classdef BarErrorBarChart < matlab.graphics.chartcontainer.ChartContainer
    properties
        XData (1,:) double = NaN
        YData (1,:) double = NaN
        EData (1,:) double = NaN
        TitleText (:,:) char = ''
    end
    properties (Dependent)
        % Provide properties to support setting & getting
        XLimits (1,2) double
        XLimitsMode {mustBeMember(XLimitsMode,{'auto','manual'})}
        YLimits (1,2) double
        YLimitsMode {mustBeMember(YLimitsMode,{'auto','manual'})}
    end
    properties (Access = private)
        BarObject (1,1) matlab.graphics.chart.primitive.Bar
        ErrorBarObject (1,1) matlab.graphics.chart.primitive.ErrorBar
    end
    
    methods(Access = protected)
        function setup(obj)
            ax = getAxes(obj);
            obj.BarObject = bar(ax,NaN,NaN);
            hold(ax,'on')
            obj.ErrorBarObject = errorbar(ax,NaN,NaN,NaN);
            obj.ErrorBarObject.LineStyle = 'none';
            obj.ErrorBarObject.LineWidth = 2;
            obj.ErrorBarObject.Color = [0.6 0.7 1];
            hold(ax,'off');
        end
        function update(obj)
            % Update Bar and ErrorBar XData and YData
            obj.BarObject.XData = obj.XData;
            obj.BarObject.YData = obj.YData;
            obj.ErrorBarObject.XData = obj.XData;
            obj.ErrorBarObject.YData = obj.YData;
            
            % Update ErrorBar delta values
            obj.ErrorBarObject.YNegativeDelta = obj.EData;
            obj.ErrorBarObject.YPositiveDelta = obj.EData;
            
            % Update axes title
            ax = getAxes(obj);
            title(ax,obj.TitleText);
        end
    end
    
    methods
        % xlim method
        function varargout = xlim(obj,varargin)
            ax = getAxes(obj);
            [varargout{1:nargout}] = xlim(ax,varargin{:});
        end
        % ylim method
        function varargout = ylim(obj,varargin)
            ax = getAxes(obj);
            [varargout{1:nargout}] = ylim(ax,varargin{:});
        end
        % title method
        function title(obj,txt)
            obj.TitleText = txt;
        end
        
        % set and get methods for XLimits and XLimitsMode
        function set.XLimits(obj,xlm)
            ax = getAxes(obj);
            ax.XLim = xlm;
        end
        function xlm = get.XLimits(obj)
            ax = getAxes(obj);
            xlm = ax.XLim;
        end
        function set.XLimitsMode(obj,xlmmode)
            ax = getAxes(obj);
            ax.XLimMode = xlmmode;
        end
        function xlm = get.XLimitsMode(obj)
            ax = getAxes(obj);
            xlm = ax.XLimMode;
        end
        
        % set and get methods for YLimits and YLimitsMode
        function set.YLimits(obj,ylm)
            ax = getAxes(obj);
            ax.YLim = ylm;
        end
        function ylm = get.YLimits(obj)
            ax = getAxes(obj);
            ylm = ax.YLim;
        end
        function set.YLimitsMode(obj,ylmmode)
            ax = getAxes(obj);
            ax.YLimMode = ylmmode;
        end
        function ylm = get.YLimitsMode(obj)
            ax = getAxes(obj);
            ylm = ax.YLimMode;
        end
    end
end

BarErrorBarChart.m을 저장한 후에는 차트의 인스턴스를 만듭니다.

BarErrorBarChart('XData',[1 2 3 4],'YData',[11 22 31 41],'EData',[2 2 2 2]);

title 함수를 호출하여 제목을 지정합니다. 그런 다음 xlim 함수를 호출하여 마지막 3개 막대를 확대합니다.

title('Top Three Contributors')
xlim([1.5 5])

참고 항목

클래스

함수

속성

관련 항목