속성값 액세스
객체 속성 및 점 표기법
그래프 작성 함수는 객체, 혹은 함수에서 생성되는 객체를 반환합니다. 예를 들면 다음과 같습니다.
h = plot(1:10);
h
는 1에서 10 사이의 값으로 구성된 그래프에 그려진 선을 나타냅니다.
점 표기법 구문은 점(.
)으로 연결된 객체 변수와 대/소문자 구분 속성 이름을 사용하여 객체.속성 이름 표기법을 구성합니다.
object.PropertyName
객체 변수가 비 스칼라인 경우 인덱싱을 사용하여 단일 객체를 참조합니다.
object(n).PropertyName
스칼라 객체 변수
h
가 plot
함수로 생성되는 선일 경우 표현식 h.Color
는 이 특정 선의 Color
속성에 대한 값입니다.
h.Color
ans = 0 0.4470 0.7410
색 값을 변수로 할당하는 경우 다음을 사용합니다.
c = h.Color;
변수 c
는 double형입니다.
whos
Name Size Bytes Class c 1x3 24 double h 1x1 112 matlab.graphics.chart.primitive.Line
대입문을 사용하여 이 선의 Color
속성에 대한 값을 변경할 수 있습니다.
h.Color = [0 0 1];
표현식에 점 표기법 속성 참조를 사용합니다.
meanY = mean(h.YData);
또는 속성값을 변경하려면 다음을 사용합니다.
h.LineWidth = h.LineWidth + 0.5;
여러 점 참조를 사용하여 속성에 포함된 기타 객체를 참조합니다.
h.Annotation.LegendInformation.IconDisplayStyle
ans = on
속성에 포함된 객체의 속성을 설정합니다.
ax = gca;
ax.Title.FontWeight = 'normal';
비 스칼라 객체 변수
그래픽스 함수는 객체로 구성된 배열을 반환할 수 있습니다. 예를 들면 다음과 같습니다.
y = rand(5); h = plot(y); size(h)
ans = 5 1
배열 인덱스를 사용하여 y
에서 첫 번째 열을 나타내는 선에 액세스합니다.
h(1).LineStyle = '--';
set
함수를 사용하여 배열의 모든 선에 대한 LineStyle
을 설정합니다.
set(h,'LineStyle','--')
속성값에 데이터 추가
점 표기법으로 "end" 인덱싱을 사용하여 선의 XData
및 YData
와 같은 데이터 배열을 포함하는 속성에 데이터를 추가할 수 있습니다. 예를 들어, 다음 코드는 선의 XData
및 YData
를 함께 업데이트하여 선을 확장합니다. 선의 x축 데이터 및 y축 데이터의 크기가 동일하도록 한 후, drawnow
에 대한 호출을 사용하여 렌더링하거나 MATLAB®으로 반환하여야 합니다.
h = plot(1:10); for k = 1:5 h.XData(end + 1) = h.XData(end) + k; h.YData(end + 1) = h.YData(end) + k; drawnow end
그래픽스 객체 변수는 핸들임
그래픽스 함수에서 반환되는 객체 변수는 핸들입니다. 핸들은 실제 객체에 대한 참조입니다. 핸들인 객체 변수는 복사되거나 객체가 삭제될 때 특정한 방법으로 동작합니다.
객체 변수 복사
예를 들어, 하나의 선으로 구성된 그래프를 생성합니다.
h = plot(1:10);
이제, 객체 변수를 다른 변수로 복사하고 새 객체 변수를 사용하여 속성값을 설정합니다.
h2 = h; h2.Color = [1,0,0]
객체 변수 h
를 h2
로 할당하면 변수에서 참조되는 객체가 아니라 핸들에 대한 복사본이 생성됩니다. 변수 h
에서 액세스되는 Color
속성의 값은 변수 h2
에서 액세스되는 속성값과 동일합니다.
h.Color
ans = 1 0 0
h
및 h2
는 동일한 객체를 참조합니다. 핸들 객체 변수를 복사해도 객체는 복사되지 않습니다.
객체 변수 삭제
동일한 선을 참조하는 객체 변수가 이제 작업 공간에 두 개 있습니다.
whos
Name Size Bytes Class h 1x1 112 matlab.graphics.chart.primitive.Line h2 1x1 112 matlab.graphics.chart.primitive.Line
이제 선 그래프를 포함하는 Figure를 닫습니다.
close gcf
line 객체는 더 이상 존재하지 않지만, line을 참조한 객체 변수는 여전히 존재합니다.
whos
Name Size Bytes Class h 1x1 112 matlab.graphics.chart.primitive.Line h2 1x1 112 matlab.graphics.chart.primitive.Line
하지만, 이 객체 변수는 더 이상 유효하지 않습니다.
h.Color
Invalid or deleted object.
h2.Color = 'blue'
Invalid or deleted object.
유효하지 않은 객체 변수를 제거하려면 clear
를 사용합니다.
clear h h2
객체 속성 나열
객체가 포함하는 속성을 확인하려면 get
함수를 사용합니다.
get(h)
MATLAB은 객체 속성과 해당 현재 값의 목록을 반환합니다.
AlignVertexCenters: 'off' Annotation: [1x1 matlab.graphics.eventdata.Annotation] BeingDeleted: 'off' BusyAction: 'queue' ButtonDownFcn: '' Children: [] Clipping: 'on' Color: [0 0.4470 0.7410] ... LineStyle: '-' LineWidth: 0.5000 Marker: 'none' ...
set
함수를 사용하여 가능한 값이 열거된 집합에서 속성값을 확인할 수 있습니다.
set(h,'LineStyle')
'-' '--' ':' '-.' 'none'
열거된 값의 집합과 함께 속성에 쓰일 수 있는 값을 포함한, 모든 설정 가능한 속성을 표시하려면 객체 변수와 함께 set
를 사용합니다.
set(h)
set 및 get으로 속성 수정하기
set
함수와 get
함수를 사용하여 속성을 액세스하고 수정할 수도 있습니다.
기존 객체에 대한 속성값을 설정하는 데 사용할 수 있는 기본 구문은 다음과 같습니다.
set(object,'PropertyName',NewPropertyValue)
특정 객체 속성의 현재 값을 쿼리하려면 다음 형식의 명령문을 사용합니다.
returned_value = get(object,'PropertyName');
속성 이름은 항상 문자형 벡터입니다. 작은따옴표를 사용하거나, 문자형 벡터 형식의 변수를 사용할 수 있습니다. 속성값은 특정 속성에 따라 다릅니다.
여러 객체/속성 작업
객체 인수가 배열인 경우 MATLAB은 모든 식별된 객체에 지정된 값을 설정합니다. 예를 들면 다음과 같습니다.
y = rand(5); h = plot(y);
모든 선을 빨간색으로 설정합니다.
set(h,'Color','red')
여러 객체에 동일한 속성을 설정하려면 구조체 또는 셀형 배열을 사용하여 속성 이름과 속성값을 지정합니다. 예를 들어, 특정 그래프를 표시하는 데 적절하게 axes 속성을 설정하도록 구조체를 정의합니다.
view1.CameraViewAngleMode = 'manual'; view1.DataAspectRatio = [1 1 1]; view1.Projection = 'Perspective';
현재 좌표축에 대해 이러한 값을 설정하려면 다음을 입력합니다.
set(gca,view1)
여러 속성 쿼리
속성 이름으로 구성된 셀형 배열을 정의하고 이 배열을 사용하여 해당 속성에 대한 값을 가져올 수 있습니다. 예를 들어, 좌표축의 "카메라 모드" 속성에 대한 값을 쿼리하고자 한다고 가정하겠습니다. 우선, 셀형 배열을 정의합니다.
camModes = {'CameraPositionMode','CameraTargetMode',... 'CameraUpVectorMode','CameraViewAngleMode'};
이 셀형 배열을 인수로 사용하여 이러한 속성의 현재 값을 가져옵니다.
get(gca,camModes)
ans = 'auto' 'auto' 'auto' 'auto'