等高线图与3个向量

3

我有一个矩阵M,大小为10201x3,其中前两列是常数,用于计算第三列中的响应Z。例如:

....    ...     .................
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
....    ...     .................

我想制作一个等高线图,其中X = M(:,1)Y = M(:,2)Z = M(:,3),不同的高度用不同的颜色表示。我需要在2D和3D中做相同的事情。


那么你已经尝试过这个 http://www.mathworks.com/help/matlab/ref/contour.html 了吗?让我们看看一些代码。 - Dan
2个回答

4

我假设你的数据是规则的,并且你知道有多少个重复的 x 元素。

我们将重复的 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确定x和y轴限制,绘制Z的等高线图。

如果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); 

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) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接