如何在MATLAB中将3列矩阵绘制为颜色图?

时间:2014-03-26 20:53:12

标签: matlab matrix 3d plot color-mapping

我有一个矩阵,其中包含一组GPS坐标的温度值。所以我的矩阵看起来像这样:

Longitude  Latitude  Value
---------  --------  -----
12.345678  23.456789   25 
12.345679  23.456790   26
%should be :
%  x           y        z

我想将此矩阵转换为人类可见的情节,如彩色图(2D或3D),我该怎么做?

3D可以是这样的: enter image description here

或只是这个的二维版本(从顶部的z轴看)。

我尝试了什么

我知道MATLAB有surfmesh函数,但我无法弄清楚如何使用它们。

如果我打电话

surf(matrix(:,1) , matrix(:,2) , matrix(:,3));

我收到错误:

Error using surf (line 75)
Z must be a matrix, not a scalar or vector

提前感谢您的帮助!

P.S:如果有一个"填充"的功能也会很棒。插值的间隙(平滑,无论:))。由于我有离散数据,将它表示为连续函数会更美观。

P.S 2:我还想在z = 0平面中使用plot_google_map

3 个答案:

答案 0 :(得分:4)

一个令人惊讶的难以找到的答案。但我很幸运,其他人提出了几乎相同的问题here

我发布了对我有用的答案:

x = matrix(:,1);
y = matrix(:,2);
z = matrix(:,3);
  xi=linspace(min(x),max(x),30)
  yi=linspace(min(y),max(y),30)
  [XI YI]=meshgrid(xi,yi);
  ZI = griddata(x,y,z,XI,YI);
  contourf(XI,YI,ZI)

打印出漂亮的彩色地图。

答案 1 :(得分:1)

避免不必要地对数据进行网格化的一个选项是计算散乱数据点的Delaunay三角剖分,然后使用trisurf之类的命令绘制数据。这是一个例子:

N=50;
x = 2*pi*rand(N,1);
y = 2*pi*rand(N,1);
z = sin(x).*sin(y);

matrix = [x y z];

tri = delaunay(matrix(:,1),matrix(:,2));
trisurf(tri,matrix(:,1),matrix(:,2),matrix(:,3))
shading interp

答案 2 :(得分:0)

假设您的矩阵为nx3。然后您可以按如下方式创建网格:

xMin=min(myMat(:,1));
xMax=max(myMat(:,1));
yMin=min(myMat(:,2));
yMax=max(myMat(:,2));

step_x=0.5; %depends on your data

[xGrid,yGrid]=meshgrid(xMin:step_x:xMax,yMin:step_y:yMax);

现在,将您的数据放在第三列中的相应索引中,在新矩阵中说valMat

您现在可以使用surf,如下所示:

surf(xGrid,yGrid,valMat);

如果您想要插值,可以将高斯内核(可能是3x3)与valMat进行卷积。