如何在MATLAB中将一个有3列的矩阵绘制成颜色地图?

3
我有一个矩阵,其中包含一组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

或者只是这个的2D版本(从顶部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

感谢您提前的任何帮助!
附言:如果有一个“填充”间隙的函数(平滑,等等 :) ),那将非常棒。由于我有离散数据,因此将其表示为连续函数会更美观。
附言2:我也想在z = 0平面中使用plot_google_map
3个回答

4
一份令人惊讶的难以找到的答案。但我很幸运,因为有人几乎问了同样的问题这里
我发布了对我有效的答案:
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)

它打印出一个漂亮的颜色地图。


你的数据是否定义在一个矩形网格上?如果是,那么有一种更简单的方法。 - Doug Lipinski
不完全是一个网格。这只是我在某条路上行走时手机传感器的输出。但我计划将其转换为网格。因此,我想听听您的解决方案。 - jeff
如果数据不在网格上,我认为你已经有了一个不错的解决方案。您也可以在此处阅读更多信息(http://www.mathworks.com/help/matlab/math/interpolating-scattered-data.html)。我将发布另一个答案,也避免使用griddata函数。 - Doug Lipinski
我有矩形格式的数据。其中一个字段是字符串,另外两个字段是整数。我想要用这三列绘制一个3D图表。 - Rahul Bali

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

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进行卷积。

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