【问题标题】:plotting a 3D plot in MATLAB from struct在 MATLAB 中从 struct 绘制 3D 图
【发布时间】:2016-11-15 08:23:24
【问题描述】:

我正在尝试根据我收集的一些数据构建一个 3D 图。数据位于多结构中。

例如,a.b.c.d(其中a 是一个结构,b(也是一个结构)在a 中,而c(也是一个结构)在b 中;和@ 987654329@(在 c 中)是字段)。数据存储如下:

[ -7.87950284920632 -14.0701803040634
 -10.4668280400161   -5.84992824233833
  22.7819823970414   21.2561603536408]

我有大约 180 行这些数据,我想加载它并构建一个 3D 绘图。我从 MathWorks 网站(scatter3plotmeshsurf)尝试了一堆图,但是我不确定如何加载数据。

或者有没有办法将它们一一绘制并叠加所有图? 数据图片:

【问题讨论】:

  • 数据是否代表X Y Z 值,例如,维度是否总是3×N?数据驻留在哪些字段中,仅在所有子字段的d 叶中,或者......它是如何构造的?
  • 是的,它们是 X Y Z 值。我在原始帖子中附上了一张图片。维度采用 3x2 矩阵的形式。编辑:我没有足够的声誉,所以我不得不链接它而不是嵌入它。数据位于结构的“pos”字段中。因此,例如,如果我的结构是 A,并且其中有一个结构 B,并且其中有一个结构 C;有一个包含数据的字段(D)。 A.B.C.D

标签: matlab plot


【解决方案1】:

(经过下面的讨论,原来OP的结构是一个1×182的多维struct,其子字段pos包含大小为3×N的数据,其中0≤N≤6 )。

那么应该这样做:

figure
clf, hold on

% Replace with actual names
if isfield(A, 'B') && ...
        isfield(A.B, 'C') && ...
        isfield(A.B.C, 'pos')

    % Concatenate all the "pos" data into a single 3×N array
    pos = [A.B.C.pos];

    % And draw the XYZ data into a scatterplot
    plot3(pos(1,:), pos(2,:), pos(3,:), ...
          'r.',...
          'Markersize', 10);
end

【讨论】:

  • @prim3 这可能意味着它没有到达plot3 命令。如果您将disp('HERE') 放在plot3 命令前面,是否会在MATLAB 命令窗口上打印任何内容?因为如果不是,那意味着您在名称中输入了错误的内容...
  • 确实如此。它打印“这里”。在这一行中也是 pos:pos = A.B.C.pos; 显示一个 3×0 的空矩阵。
  • @prim3 并且您确定pos 中的所有元素都不是NaNinf?也许也可以在plot3 命令之后尝试axis tight
  • 最后一个值为 0。前 2 个仅为 [ ]。也许那是造成它的原因?我们可以以某种方式排除它吗?
  • @prim3 不,0 应该绘制得很好。不确定,在 plot 命令之前设置一个断点并探索它为什么不绘图;这段代码在这里工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
相关资源
最近更新 更多