【问题标题】:matlab coordinatesmatlab坐标
【发布时间】:2013-02-28 00:29:51
【问题描述】:

我正在处理一个涉及在 Matlab 中绘制一些坐标的小项目。

以下是我的 csv 文件的示例。数据总行数约为 160,000:

31040,55725,0
30930,55725,-1
30875,55630,3
30765,55630,0
30655,55630,5
30545,55630,0

前两列是 x,y 坐标,第三列是它们的值。 数据是从 rpg 类型的游戏中生成的。玩家在给定坐标处做某事,然后他要么找到东西 (0

所以我想做的是制作一个 3D 图,显示坐标有多少次命中,以及命中的值是多少,有点像直方图?

我的值范围是 x:30000 - 33000,Y:55000 - 56000 和 z:-1 - 23。

我尝试在包含 5 行的示例文件上使用网格/网格网格并且它有效。但是,即使我尝试重新排列列或转置矩阵,x、y、z 坐标总是被错误地放置。

注意:当我使用原始文件尝试代码时,出现“内存不足”错误。 Matlab不能取大量数据吗?还是我的代码?

我尝试的简单代码如下所示:

x = test(:, 1);
y = test(:, 2);
z = test(:, 3);

zz = [x,y,z];
%R = meshgrid(zz);
%mesh(R);
mesh(zz)

提前致谢!

【问题讨论】:

    标签: matlab 3d coordinates mesh


    【解决方案1】:

    如何将accumarray 与自定义函数一起使用:

    sel = test(:,3) > 0; % work only with z>0
    x = test(sel,1) - min(test(sel,1)) + 1; % convert from x to legitimate indices
    y = test(sel,2) - min(test(sel,2)) + 1;
    a = accumarray( {x, y}, test(sel,3), [max(x) max(y)], @numel, [], true );
    % plot using bar3
    bar3( a, 1, 'detached' );
    

    【讨论】:

      【解决方案2】:

      我会用这个:

      [X,Y] = meshgrid(30000:33000,55000:56000);
      Z=zeros(size(X));
      Z(31040-30000+1,55725-55000+1) = 0;
      Z(31930-30000+1,55725-55000+1) = -1;
      Z(30875-30000+1,55630-55000+1) = 3;
      mesh(Z)
      

      请注意: - 大小(X)== 大小(Y)

      所以我想做的是制作一个 3D 图,显示坐标有多少次命中,以及命中的值是多少,有点像直方图?

      您可以增加适当的 Z(i,j) 字段来计算坐标出现的频率。

      【讨论】:

      • 这就是我认为应该是的样子,但你没想到我会绘制 160,000 行 Z(x,y) = value;在我的代码文件中?我正在考虑@Shai 回答中的方法。无论如何,这段代码似乎有两个问题。虽然它似乎有效,但我从图中读取的值不是 100% 正确?我也想,如果可能的话,每个 z 值都有真实的坐标。这将使我更容易从图中阅读,但不是必需的。感谢您和 Shai 的快速答复
      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 2015-11-20
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多