【问题标题】:How to plot a 3-column matrix as a color map in MATLAB?如何在 MATLAB 中将 3 列矩阵绘制为颜色图?
【发布时间】:2014-03-26 20:53:12
【问题描述】:

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

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

等等

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

3D 可以是这样的:

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


    【解决方案1】:

    一个令人惊讶的难以找到的答案。但我很幸运,有人问了几乎相同的问题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)
    

    打印出漂亮的彩色地图。

    【讨论】:

    • 您的数据是在矩形网格上定义的吗?如果是这样,有一个更简单的方法。
    • 不完全是网格。这只是我在某条路上行走时手机的传感器输出。但我打算将其转换为网格。所以我想听听你的解决方案。
    • 好吧,如果它不在网格上,我想你已经有了一个不错的解决方案。您也可以在此处阅读更多内容 (mathworks.com/help/matlab/math/…)。我将发布另一个避免使用 griddata 函数的答案。
    • 我有矩形格式的数据。此外,一个字段是字符串,两个字段是整数。我想用这三列绘制一个 3d 图。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      假设您的矩阵是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)。

      【讨论】:

        猜你喜欢
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-12
        • 2015-02-23
        • 2020-09-26
        • 2013-01-08
        相关资源
        最近更新 更多