2012-09-27 226 views
4

我有数据的3个向量,X(位置)这两者都是不规则地间隔开,Y(位置),和Z(在每个位置处的兴趣值)。我尝试了contourf,它不起作用,因为它需要一个用于Z输入的矩阵。Matlab的:使等高线图与3个矢量

+1

如果你的'Z'不是一个矩阵,以什么格式呢? –

+1

这是一个向量,它是一系列对应于2D连续位置的值 – 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