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
轴,第三列是我的数据。如何绘制条形图,并根据 MATLAB 中每个数据点的数据值(如曲面图中的 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)
这是我在 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
轴,第三列是我的数据。如何绘制条形图,并根据 MATLAB 中每个数据点的数据值(如曲面图中的 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)