MATLAB 中某些数据的 3D 可视化

3D visualization of some data in MATLAB

这是我在 MATLAB 中的数据矩阵:

a = [43.676289  -79.477386  1
     43.676370  -79.477107  5
     43.676517  -79.477375  20
     43.676417  -79.477509  8
     43.676129  -79.477278  15];

第一列是Y轴,第二列是X轴,第三列是我的数据。如何绘制条形图,并根据 MA​​TLAB 中每个数据点的数据值(如曲面图中的 colorbar)调整条形的颜色?

我添加了我为另一个数据矩阵绘制的示例图。在此示例中,X、Y 和 Z 是线性的,我可以使用 'surf' 命令毫无问题地绘制此图。我需要为提到的数据绘制相同的图表,但是 XY 轴的单位与 Z 不兼容,这让我很困惑。

作为补充说明,如果我们只绘制 XY 平面,结果如下图所示:

scatter(a(:,2),a(:,1),'*')

此外,这是一个简单的示例,可能有助于扩展它:

z = [5     0     2     0
     0     0     0     0
     0     0     0     0
     0     0     0     0];
[X,Y] = meshgrid(0:1:3);
surf(X,Y,Z)

谢谢

您可以执行以下操作 - 根据您的数据构建 Z 作为矩阵:

a = [43.676289   -79.477386  1
     43.676370   -79.477107  5
     43.676517   -79.477375  20
     43.676417   -79.477509  8
     43.676129   -79.477278  15];
[X,Y] = meshgrid(sort(a(:,2)),sort(a(:,1)));
Z = zeros(size(X));
for k = 1:size(a,1)
    xind = abs(X-a(k,2))<eps;
    yind = abs(Y-a(k,1))<eps;
    Z(xind & yind) = a(k,3);
end

输入 surf(X,Y,Z) 会给你这个:

不过,我认为 bar3 可能是更好的选择:

b = bar3(sort(a(:,1)),Z);
xticklabels(sort(a(:,2)));
cdata_sz = size(b(1).CData);
z_color = repelem(Z,6,4);
z_color(abs(z_color)<1) = nan;
z_color = mat2cell(z_color,...
    cdata_sz(1),ones(1,size(Z,2))*cdata_sz(2));
set(b,{'CData'},z_color.')
view(-70,30)