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

问题描述 投票:3回答:3

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

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

等等

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

3D可以是这样的:

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

matlab matrix 3d plot color-mapping
3个回答
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
投票

避免不必要地对数据进行网格化的一个选项是计算散乱数据点的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);

如果你想要插值,你可以用valMat卷积高斯核(可能是3x3)。

© www.soinside.com 2019 - 2024. All rights reserved.