Main Content

그래픽스 객체를 사용한 작업

그래픽스 객체

그래픽스 객체는 그래프를 표시하는 데 사용되는 기본 요소입니다. 이 객체들은 다음 다이어그램에 나와 있는 것처럼 계층 구조로 구성됩니다.

플로팅 함수를 호출하면 MATLAB®에서는 Figure 창, axes, line, text 등 다양한 그래픽스 객체를 사용하여 그래프를 생성합니다. 각 객체에는 정해진 속성의 집합이 있으며, 이를 통해 그래프의 동작과 형태를 제어할 수 있습니다.

예를 들어, 다음 명령문은 변수 y의 데이터로부터 막대 그래프를 생성하고 막대가 표시되는 형태에 대한 속성을 설정합니다.

y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y,'FaceColor','green','EdgeColor','black','LineWidth',1.5)

일반적인 그래픽스 객체

함수를 호출하여 그래프를 생성하는 경우 MATLAB에서는 그래픽스 객체로 구성된 계층 구조를 만듭니다. 예를 들어, plot 함수를 호출하면 다음과 같은 그래픽스 객체가 생성됩니다.

  • Figure — 좌표축(axes), 도구 모음, 메뉴 등이 포함되어 있는 창

  • axes — 데이터를 나타내는 객체가 포함되어 있는 좌표계

  • line — plot 함수로 전달된 데이터 값을 나타내는 선

  • text — 좌표축 눈금과 제목 및 주석(선택 사항)에 대한 레이블

그래프 유형마다 데이터를 나타내기 위해 사용하는 객체가 다릅니다. 여러 종류의 그래프가 있기 때문에 데이터 객체의 유형도 여러 가지입니다. 선과 사각형 등의 일반적인 용도로 사용되는 데이터 객체 유형도 있고, 오차 막대, 컬러바, 범례 등의 매우 특화된 데이터 객체 유형도 있습니다.

객체 속성에 액세스

플로팅 함수는 그래프를 만드는 데 사용된 객체를 반환할 수 있습니다. 예를 들어, 다음 명령문은 그래프를 만들고 plot 함수로 만든 line 객체를 반환합니다.

x = 1:10;
y = x.^3;
h = plot(x,y);

h를 사용하여 line 객체의 속성을 설정합니다. 예를 들어, Color 속성을 설정합니다.

h.Color = 'red';

플로팅 함수를 호출할 때 line 속성을 지정할 수도 있습니다.

h = plot(x,y,'Color','red');

line 속성을 쿼리하여 현재 값을 확인할 수 있습니다.

h.LineWidth
ans =
	0.5000

객체 속성 찾기

객체의 속성을 보려면 다음을 입력하십시오.

get(h)

MATLAB에서 이 객체의 속성과 현재 속성값을 목록으로 표시해 반환합니다.

객체의 속성과 가능한 값에 대한 정보를 보려면 다음을 입력하십시오.

set(h)

객체 속성 설정

set 함수를 사용하여 여러 속성을 한 번에 설정할 수 있습니다.

기존 객체 속성 설정

여러 객체에서 동일한 속성을 같은 값으로 설정하려면 set 함수를 사용하십시오.

예를 들어, 다음 명령문은 5×5 행렬(열당 하나씩 다섯 개의 line 객체 생성)을 플로팅한 다음 Marker 속성을 정사각형으로, MarkerFaceColor 속성을 녹색으로 각각 설정합니다.

y = magic(5);
h = plot(y);
set(h,'Marker','s','MarkerFaceColor','g')

이 경우 h는 그래프의 다섯 개 선당 하나씩 총 다섯 개의 핸들을 포함하는 벡터입니다. set 명령문은 모든 선의 Marker 속성과 MarkerFaceColor 속성을 동일한 값으로 설정합니다.

특정 객체의 속성값을 설정하려면 핸들 배열의 요소를 참조하십시오.

h(1).LineWidth = 2;

여러 속성값 설정

각 선의 속성을 다른 값으로 설정하려는 경우 셀형 배열을 사용하여 모든 데이터를 저장하고 이를 set 명령으로 전달할 수 있습니다. 예를 들어, 플롯 하나를 만들고 line 핸들을 저장합니다.

figure
y = magic(5);
h = plot(y);

각 선에 각기 다른 마커를 추가하고 마커의 면 색을 선과 동일한 색으로 지정하려 한다고 가정해 보겠습니다. 이 경우 두 개의 셀형 배열, 즉 속성 이름이 포함된 셀형 배열과 원하는 속성값이 포함된 셀형 배열을 정의해야 합니다.

prop_name 셀형 배열에는 두 개의 요소가 포함됩니다.

prop_name(1) = {'Marker'};
prop_name(2) = {'MarkerFaceColor'};

prop_values 셀형 배열에는 10개의 값이 포함되는데, 그중 다섯 개는 Marker 속성값이고 나머지 다섯 개는 MarkerFaceColor 속성값입니다. prop_values는 2차원 셀형 배열입니다. 첫 번째 차원은 값이 적용되는 h의 핸들을 나타내고 두 번째 차원은 값이 대입되는 속성을 나타냅니다.

prop_values(1,1) = {'s'};
prop_values(1,2) = {h(1).Color};
prop_values(2,1) = {'d'};
prop_values(2,2) = {h(2).Color};
prop_values(3,1) = {'o'};
prop_values(3,2) = {h(3).Color};
prop_values(4,1) = {'p'};
prop_values(4,2) = {h(4).Color};
prop_values(5,1) = {'h'};
prop_values(5,2) = {h(5).Color};

MarkerFaceColor에는 항상 대응하는 선의 색 값이 할당되는데, 이 값은 선의 Color 속성을 가져오는 방식으로 얻게 됩니다.

셀형 배열을 정의한 후에는 set을 호출하여 새 속성값을 지정합니다.

set(h,prop_name,prop_values)

객체 작업을 위한 함수

다음 표에는 객체 작업에 일반적으로 사용되는 함수가 나열되어 있습니다.

함수

용도

allchild

지정한 객체의 모든 자식을 찾습니다.

ancestor

그래픽스 객체의 선조를 찾습니다.

copyobj

그래픽스 객체를 복사합니다.

delete

객체를 삭제합니다.

findall

숨겨진 핸들을 포함해 모든 그래픽스 객체를 찾습니다.

findobj

지정한 속성값이 있는 객체의 핸들을 찾습니다.

gca

현재 좌표축의 핸들을 반환합니다.

gcf

현재 Figure의 핸들을 반환합니다.

gco

현재 객체의 핸들을 반환합니다.

get

객체의 속성값을 쿼리합니다.

ishandle

값이 유효한 객체 핸들인 경우 True입니다.

set

객체의 속성값을 설정합니다.

인수 전달

특화된 플로팅 함수를 정의하여 사용자 지정된 그래프의 생성을 단순화할 수 있습니다. 함수를 정의하면 MATLAB 플로팅 함수처럼 인수를 전달할 수 있습니다.

다음 예제에서는 입력 인수 x에 지정된 범위에서 수학 표현식을 실행한 다음 결과를 플로팅하는 MATLAB 함수를 보여줍니다. plot 함수를 두 번째로 호출하면 결과의 mean 값이 빨간색 선으로 플로팅됩니다.

이 함수는 계산된 값에 따라 y축 눈금을 수정합니다. 축 레이블과 제목이 지정되는 것으로 사용자 지정 그래프가 완성됩니다.

function plotFunc(x)
   y = 1.5*cos(x) + 6*exp(-.1*x) + exp(.07*x).*sin(3*x);
   ym = mean(y);
   hfig = figure('Name','Function and Mean');
   hax = axes('Parent',hfig);
   plot(hax,x,y)
   hold on
   plot(hax,[min(x) max(x)],[ym ym],'Color','red')
   hold off
   ylab = hax.YTick;
   new_ylab = sort([ylab, ym]);
   hax.YTick = new_ylab;
   title ('y = 1.5cos(x) + 6e^{-0.1x} + e^{0.07x}sin(3x)')
   xlabel('X Axis')
   ylabel('Y Axis')
end

입력 인수의 값을 정의하고 함수를 호출합니다.

x = -10:.005:40;
plotFunc(x)

기존 객체 핸들 찾기

findobj 함수를 사용하면 특정 속성값이 있는 객체를 검색하여 그래픽스 객체의 핸들을 가져올 수 있습니다. findobj를 사용하면 임의로 조합된 속성값을 지정할 수 있으며, 이를 통해 많은 객체 중 하나를 손쉽게 선택할 수 있습니다. findobj는 정규 표현식도 인식합니다.

특정 유형의 모든 객체 찾기

모든 객체에는 객체의 유형을 나타내는 Type 속성이 있기 때문에, 특정 유형 객체의 핸들을 모두 찾을 수 있습니다. 예를 들어, 다음은

h = findobj('Type','patch');

모든 Patch 객체의 핸들을 찾습니다.

특정 속성으로 객체 찾기

여러 개의 속성을 지정하여 검색 범위를 좁힐 수 있습니다. 예를 들어, 다음은

plot(rand(5),'r:')
h = findobj('Type','line','Color','r','LineStyle',':');

모든 빨간색 점선의 핸들을 찾습니다.

h = 

  5x1 Line array:

  Line
  Line
  Line
  Line
  Line

검색 범위 제한

시작 Figure 또는 시작 axes의 핸들을 첫 번째 인수로 전달하여 객체 계층 구조에 시작점을 지정할 수 있습니다. 예를 들어, 다음은

h = findobj(gca,'Type','text','String','\pi/2');

현재 좌표축 내에서만 π/2를 찾습니다.