3

I've a matrix M 10201x3 where the first 2 column are constant used to compute the response Z in column 3. Example:

....    ...     .................
0.0031  0.02    0.792729854583740
0.0031  0.03    0.802729845046997
0.0031  0.04    0.812729895114899
0.0031  0.05    0.822729885578156
....    ...     .................
0.0034  0.02    0.867461800575256
0.0034  0.03    0.877461791038513
0.0034  0.04    0.887461841106415
0.0034  0.05    0.897461831569672
0.0034  0.06    0.907461822032929
....    ...     .................

I wanna make a contour plot where X = M(:,1), Y = M(:,2) and Z = M(:,3) with different colors for different hights. I need to do the same thing in both 2D and 3D.

4

2 回答 2

4

我假设您的数据是规则的,并且您知道您有多少重复x元素。让我们打电话给number of repeating x = L- 否则您将能够找到答案。

你需要重塑你的向量:

X = reshape(X,[],L);
Y = reshape(Y,[],L);
Z = reshape(Z,[],L);

你需要Z它是怎样的,但只需要 . 的第一行X和第一列Y

X = X(:,1);
Y = Y(1,:);

然后你可以使用contour

contour(X,Y,Z); 

不需要插值!

contour(X,Y,Z)、contour(X,Y,Z,n) 和 contour(X,Y,Z,v) 使用 X 和 Y 绘制 Z 的等高线图以确定 x 和 y 轴范围.

如果 X 和 Y 是向量,则 X 的长度必须等于 Z 中的列数,Y 的长度必须等于 Z 中的行数。

如果 X 和 Y 是矩阵,则它们的大小必须等于 Z 的大小。

因此更短:

X = X(1:L:end);
Y = Y(1:L);
Z = reshape(Z,[],L);

contour(X,Y,Z); 
于 2013-10-24T08:19:01.300 回答
1

我建议使用带有函数的插值将此数组转换为三个二维数组griddata()。插值对于非常规数据很有用。首先,我们创建坐标网格:

xq=min(X):(max(X)-min(X))/200:max(X);
yq=min(Y):(max(Y)-min(Y))/200:max(Y);

[Xq, Yq] = meshgrid(xq,yq);

比,我们使用插值:

Zq =griddata(X,Y,Z,Xq,Yq);

比你可以绘制:

countour(Xq,Yq,Zq) 
于 2013-10-24T08:15:05.423 回答