axes 속성을 설정하는 편의 함수 활성화하기
차트를 ChartContainer
클래스의 서브클래스로 개발할 때 좌표축에 대한 속성을 설정하는 MATLAB® 편의 함수 중 일부를 활성화하는 것이 좋습니다. 예를 들어, title
함수를 지원하도록 클래스를 설계할 수 있습니다. 편의 함수를 활성화하면 MATLAB 플로팅 함수와 일치하는 사용자 경험을 제공할 수 있습니다.
여러 유형의 속성 지원
편의 함수를 활성화하는 방법은 함수가 계산되지 않는 속성을 제어하는지 아니면 계산되는 속성을 제어하는지에 따라 달라집니다. 다음 표에는 지원할 수 있는 편의 함수가 나와 있습니다.
편의 함수 | 연관 axes 속성 | 속성 유형 |
---|---|---|
| 계산되지 않음 | |
| 계산되지 않음 | |
| 계산됨 | |
xticks , yticks , zticks |
| 계산됨 |
| 계산됨 | |
| 계산됨 |
계산되지 않는 속성에 대해 함수 활성화하기
계산되지 않는 속성은 고정 값입니다. 이 값은 사용자 또는 코드가 명시적으로 변경할 때까지 변경되지 않습니다.
계산되지 않는 속성에 대해 편의 함수를 활성화하려면 제어하려는 axes 속성의 값을 저장하는 클래스에 퍼블릭 속성을 정의하십시오. 그런 다음, 지원하려는 편의 함수와 동일한 이름을 갖고 동일한 호출 구문을 지원하는 퍼블릭 메서드를 정의합니다. 이 메서드에 속성값을 설정하는 코드를 한 줄 추가합니다. 예를 들어, 제목을 저장하는 TitleText
라는 퍼블릭 속성을 가진 클래스가 있다고 가정해 보겠습니다. 다음 코드에서는 이 클래스에 대한 title
메서드를 보여줍니다.
function title(obj,txt) obj.TitleText = txt; end
다음으로, 대응하는 axes 속성을 설정하는 MATLAB 편의 함수를 호출하는 코드를 update
메서드에 한 줄 추가합니다.
title(getAxes(obj),obj.TitleText);
이전 단계를 수행하고 클래스 파일을 저장하고 나면 차트의 인스턴스를 만들고 title
함수를 호출하여 제목을 표시할 수 있습니다. 이렇게 하면 다음 호출 시퀀스가 트리거됩니다.
이 클래스의
title
메서드는 업데이트할 차트를 표시하는TitleText
속성을 설정합니다.update
메서드는 다음에drawnow
가 실행될 때 실행되고 좌표축에 대한title
함수를 호출합니다.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
속성에 대한 액세스를 제공하려면 XLimits
및 XLimitsMode
라는 종속 속성 쌍을 정의하십시오.
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])
참고 항목
클래스
함수
속성
- Axes 속성 | Bar 속성 | ErrorBar 속성