我有 3 个数据向量,X(位置)、Y(位置),它们都不是规则间隔的,以及 Z(每个位置的感兴趣值)。我尝试了contourf,它不起作用,因为它需要一个用于Z输入的矩阵。
问问题
30362 次
2 回答
8
您也可以使用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
于 2014-09-04T13:22:08.810 回答
6
对于等高线图,您实际上需要一个 z 值矩阵,或在网格上评估的一组 z 值(向量)。您不能使用网格上 (X,Y) 点处的孤立 Z 值定义轮廓(即您声称拥有的)。
您需要让生成过程(或函数)为 (x,y) 点的网格提供值。
如果不是,那么您可以按照@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)
每个点的值的原始矢量点,即插值曲面轮廓上的轮廓。
于 2012-09-27T06:27:01.783 回答