본문 바로가기
매트랩(Matlab)/매트랩 질문모음

[Matlab / 매트랩] 데이터가 3차원 좌표점으로 주어져 있을 때, mesh형태의 그래프 그리기

by freezkim 2010. 4. 27.
Q. 3차원 좌표들만을 (예 : (1,2,3), (1,2,4), (3,5,1), (3,5,2)) 포함하는 3차원 면을 그릴려고 하는데 어떻게 해야 하나요?

3차원 좌표가 구해져 있지만, 데이터를 가지고서 plot3 로 해당 좌표를 표시하여 나타내니 입체처럼 보이지 않아서요.
어떻게 해야 mesh형태처럼 면으로 된 그래프를 그릴 수 있을까요?

A. griddata명령어를 사용하시면 됩니다.

기본적으로 3차원 좌표들을 가지곤 plot3명령어를 써야 합니다만, 이 데이터를 interpolation해서
그래프의 형태를 예측하여 mesh그래프를 그릴 수 있게 할 수 있습니다.

즉, 3차원 좌표를 가지고, 그래프의 식을 도출해 내서, 그 사이를 메꾸어 내는거죠.
(정확하게 말하자면 식을 fitting하는 거죠. 수치해석적인 부분이라 차후 강의에서 자세히 설명하도록 하겠습니다.)

이런 과정을 가능하게 하는 명령어가 griddata 명령어 입니다.

사용과정은 다음과 같습니다.
1) 3차원 데이터가 주어져 있다.(x,y,z 좌표)
2) mesh그래프를 그리기 위해선 m by n크기의 행렬 데이터가 필요하므로, m by n 크기의 행렬 X, Y를 meshgrid 명령어를 이용해서 미리 만든다.
3) griddata명령어를 사용해서 Z의 데이터를 만든다.
4) mesh명령어를 사용하여 그래프를 그린다. 

코딩을 보시면 좀더 이해가 쉽지 않을까 쉽네요. rand 함수를 이용해서 x,y,z좌표를 임의로 생성한 후에 위의 과정을 거쳐보겠습니다.

x=rand(1,100)*10;
y=rand(1,100)*10;
z=rand(1,100)*10;  %% 임의의 x,y,z좌표를 선정했습니다.

xp=[0:0.1:10];
yp=[0:0.1:10];  %%3차원 데이터가 0~10사이니, meshgrid를 만들 데이터도 0~10사이로 지정해야겠죠.

[X,Y]=meshgrid(xp,yp);
Z=griddata(x,y,z,X,Y); 
%% griddata를 이용해서 X,Y데이터를 만들어 냅니다.  x,y,z좌표를 대입하고, X,Y와 같은 데이터 형식으로 Z가 만들어 지도록 X,Y를 뒤에 입력해 줍니다.


mesh(X,Y,Z); %% 만들어진 X,Y,Z 데이터로 그래프를 그립니다.



결과는 이런식으로 나타나게 됩니다. 위에서 x,y,z좌표 대신에 적절하게 데이터를 입력하고, xp, yp의 범위를 적절히 바꿔주면 되겠죠ㅋ