1

我正在处理一个涉及在 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 < z <= 23 ) 要么什么也没找到 (z = 0)。(z = -1 表示不确定,在这种情况下可以忽略)。由于玩家可以一遍又一遍地玩游戏,一些 x,y 坐标将具有相同或不同的值。

所以我想做的是制作一个 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)

提前致谢!

4

2 回答 2

0

如何使用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' );
于 2013-02-27T16:29:11.720 回答
0

我会用这个:

[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) 字段来计算坐标出现的频率。

于 2013-02-27T16:29:51.500 回答