최근에 매트랩 브러시 기능을 자주 사용하고 있습니다. 그래프를 그리고 유효한 데이터를 선택하기 위해서 아래 포스팅에서 소개를 했었던 브러시, 데이터 커서 기능을 굉장히 많이 사용하고 있고 브러시 된 데이터들을 변수를 저장하여 MATLAB 워크스페이스에서 가공을 하고 유효한 데이터들을 얻는 작업들을 수행하곤 합니다.

https://iamaman.tistory.com/2830

위 포스팅에서 브러쉬 된 데이터들을 “변수 만들기” 를 통해서 변수로 저장할 수 있다는 것을 소개한 적이 있었는데~ MATLAB 에서는 조금 더 다양한 방법으로 brush 된 데이터들에 접근할 수 있었습니다.

일단 아래와 같이 그래프를 하나 그리고~ brush on 을 해 줍니다~

x=1:10

p = plot(x)

brush on

Figure 창에서 데이터들을 선택한 후에~ 보통은 오른쪽 클릭을 해서 “변수 만들기” 를 하지만 아래와 같은 명령을 통해서도 brush 된 데이터를 변수로 만들 수 있습니다.

일단 브러시 된 데이터들의 인덱스는 아래 명령어를 통해서 확인할 수 있습니다.

ind = find(get(p, 'BrushData'));

다음으로 인덱스에 따른 X, Y 좌표의 값들은 아래와 같은 명령어를 통해 변수로 만들 수 있습니다.

brush = logical(get(p, 'BrushData'))

xd = get(p, 'XData')

yd = get(p, 'YData')

brushed_x = xd(brush)

brushed_y = yd(brush)

brushed_x, brushed_y 변수를 확인해 보면 브러쉬 된 데이터가 저장 된 것을 확인할 수 있고~ 만약 3차원 그래프라면 z 축의 값도 동일한 방식으로 구할 수 있습니다.

위 코드에서 plot 핸들을 p 라는 변수로 받아서 사용을 했는데~ plot 은 axes 의 Children 입니다. 따라서 아래와 같이 gca 의 ‘Children’ 속성을 통해서도 똑같이 plot 핸들을 구할 수 있습니다.

p = get(gca, 'Children')

gca 키워드에 대해서는 아래 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/174

추가적으로~ 제가 많이 참고 하는 사이트로 “Undocumented Matlab” 이라는 사이트가 있는데~ MATLAB 을 조금 더 파워풀하게 사용하고자 하시는 분들은 아래 사이트에 방문해 보시기 바랍니다.

https://undocumentedmatlab.com

MATLAB brush 데이터에 접근하는 다양한 방법들은 아래 포스팅을 통해서도 확인할 수 있습니다.

https://undocumentedmatlab.com/blog/accessing-plot-brushed-data

그리고 위 포스팅 내용 중 uiinspect 라고 하는 괜찮은 유틸을 확인할 수 있었는데~ 해당 유틸은 아래 주소의 File Exchange 사이트를 통해 다운로드 받을 수 있습니다.

https://kr.mathworks.com/matlabcentral/fileexchange/17935-uiinspect-display-methods-properties-callbacks-of-an-object



MATLAB 그래프를 좀 더 효율적으로 또는 다양하게 변화 시키고 싶다면, graphic handle 에 대해 아셔야 합니다.

 

일단 다음과 같은 y = x 그래프를 하나 그려보죠.


 



x=1:10; y=1:10;

h_graphic=plot(x,y);

 

다음과 같은 그래프가 나오죠.

 

 

 

 

위 코드의 h_graphic 이 바로 이 그래프 선의 handle 입니다.

 

h_graphic 에는 그래프에 대한 다양한 property 들이 들어 있고 현재의 설정 상태를 확인 할 때는 get(h_graphic) 명령어를 통해 확인 할 수 있습니다.

 

command 창에 다음과 같이 설정 상태가 나옵니다.

 

 


 
 

그럼 간단하게 set() 명령어를 이용하여 YData 를 다음 코드처럼 변경해 보죠.

 

set(h_graphic, 'Ydata',[1:10]*2)

 

set() 명령어를 이용하여 handle 의 property를 변경 할 때는 set(handle, 'property name', 변경할 값)의 형태로 넣어 주면 됩니다.

 

property name 은 구분만 되면 일부만 써도 상관이 없습니다.

 

즉 위의 코드는 다음과 같이 써도 무방합니다.

 

set(h_graphic, 'yd',[1:10]*2)

 

위 코드에 의해 y=2*x 형태의 그래프가 된 것을 확인 할 수 있습니다.

 

 




 

MATLAB 의 핸들 값들은 double class 의 값들로 되 있습니다.

 

h_graphic 을 command 창에 타이핑 해보면 다음과 같은 결과가 나옵니다.

 

 

현재 figure 창의 handle 은 gcf 라는 키워드를 통해 알 수 있습니다.

 

 

현채 axis 의 handle 은 gca 라는 키워드를 통해 알 수 있습니다.

 

 

 

다음 코드를 통해 h_graphic의 parent, 즉 상위 handle 이 무엇인지를 확인 할 수 있습니다.

 

 
 

위에서 확인한 현재의 axis handle 이 h_graphic의 parent handle 이라는 것을 확인 할 수 있죠.



 

그래프의 각 object 를 직접 선택하여 handle 값을 구할 수도 있습니다.

 

즉 내가 바꾸고자 하는 부분이 어떤 핸들인지 용어를 알지 못해도 직접 그래프에서 선택해서 handle 을 알 수 있다는 것입니다.

 

다음 그림처럼 커서 버튼(Edit Plot)을 클릭 후에 흰색 바탕 부분을 선택합니다.

 

 

 

 

그리고 command 창에 gco 를 타이핑 하면 현재 선택한 object 의 handle 을 알려 줍니다.

 

 

위 command 결과를 보면 위 그림에서 선택한 부분이 바로 axis handle 부분이라는 것을 알 수 있습니다.


+ Recent posts