【问题标题】:3D visualization of some data in MATLABMATLAB中一些数据的3D可视化
【发布时间】:2017-07-23 21:55:07
【问题描述】:

这是我在 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)

谢谢

【问题讨论】:

  • 如果您向我们展示了图中有效的代码/数据,将会很有帮助。
  • 对不起@Wolfie 我不知道如何在这里回复,所以我通过添加更多信息来编辑问题。关于有效的代码,如您所见,这是一个简单的“meshgrid”命令和“surf”图。谢谢
  • 编辑问题是添加更多信息的正确方法。保持代码格式简单,只使用缩进 - 你不能在浏览器中运行 MATLAB 代码 sn-ps!

标签: matlab plot graph matlab-figure surface


【解决方案1】:

您可以执行以下操作 - 根据您的数据将 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)

【讨论】:

  • 这太棒了!谢谢@EBH!作为一个附加选项,您是否知道如何将这些点连接在一起以形成一个曲面?假设我用几个点测量一座山的高度,我想通过这几个样本点来绘制山的模型。我希望我解释得很好。无论如何感谢您的第一个答案。
  • @user8296976 欢迎您!如果我的意图正确,那么这正是surf所做的。为什么对你没有好处?
  • Surf 的问题是当没有可用数据时它会归零。但我希望在可用点之间有一个光滑的表面。我拥有的样本点越多,我可以创建的模型就越准确......
  • 所以这不是关于可视化,而是关于插值。先看看interpinterp2。还要寻找样条的方法。无论如何,这是一个完全不同的问题。
  • 这是下一步的良好起点。此时我只需要那个“bar3”图表。
猜你喜欢
  • 1970-01-01
  • 2019-09-15
  • 2019-07-27
  • 2020-10-16
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多