2012-09-27 1 views
4

나는 규칙적으로 간격을 두지 않은 X (위치), Y (위치) 및 Z (각 위치에서의 관심 가치)의 데이터 벡터를 가지고 있습니다. contourf를 시도했는데, Z 입력에 대한 행렬이 필요하기 때문에 작동하지 않습니다.Matlab : 3 벡터 벡터로 등고선 만들기

+1

'Z'가 매트릭스가 아닌 경우 어떤 형식입니까? –

+1

그것은 벡터입니다. 2D surace의 위치에 해당하는 일련의 값입니다. – Moe

+0

도움이 될 것입니다. http://blogs.mathworks.com/videos/2007/11/02/advanced-matlab-surface-plot- 비 균일 데이터 / – bla

답변

5

플롯 contour 플롯의 경우 실제로 z 값의 행렬 또는 격자에서 평가 된 z 값의 집합 (벡터)이 필요합니다. 그리드의 (X, Y) 점에서 격리 된 Z 값 (즉, 사용자가 소유하고있는 것)을 사용하여 윤곽선을 정의 할 수 없습니다.

생성 과정 (또는 함수)에 (x, y) 점의 격자 값을 제공해야합니다.

그렇지 않은 경우 a surface from nonuniform data을 @nate가 정확하게을 가리 키도록 생성 한 다음 그 표면에 윤곽선을 그릴 수 있습니다.

는 다음의 (랜덤) 예를 고려

N = 64; % point set 
x = -2 + 4*rand(N,1); % random x vector in[-2,2] 
y = -2 + 4*rand(N,1); % random y vector in[-2,2] 

% analytic function, or z-vector 
z = x.*exp(-x.^2-y.^2); 

% construct the interpolant function 
F = TriScatteredInterp(x,y,z); 

t = -2:.25:2; % sample uniformly the surface for matrices (qx, qy, qz) 
[qx, qy] = meshgrid(t, t); 
qz = F(qx, qy); 

contour(qx, qy, qz); hold on; 
plot(x,y,'bo'); hold off 

서클 값 점당 (x,y,z) 상기 보간 된 표면의 윤곽에 윤곽 원래 벡터 점에 대응한다. enter image description here enter image description here

6

또한 griddata을 사용할 수 있습니다.

%Generate random data 
x = rand(30,1); 
y = rand(30,1); 
z = rand(30,1); 

%Create regular grid across data space 
[X,Y] = meshgrid(linspace(min(x),max(x),n), linspace(min(y),max(y),n)) 

%create contour plot 
contour(X,Y,griddata(x,y,z,X,Y)) 

%mark original data points 
hold on;scatter(x,y,'o');hold off