如何在MATLAB中将3列矩阵绘制为颜色图?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MATLAB中将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有surf
和mesh
函数,但我无法弄清楚如何使用它们。
如果我打电话
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。
答案
一个令人惊讶的难以找到的答案。但我很幸运,有人问过几乎同样的问题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)
它打印出漂亮的彩色地图。
另一答案
避免不必要地对数据进行网格化的一个选项是计算散乱数据点的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
另一答案
假设你的矩阵是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)。
以上是关于如何在MATLAB中将3列矩阵绘制为颜色图?的主要内容,如果未能解决你的问题,请参考以下文章