2013-02-27 103 views
1

我正在与一个涉及在Matlab中绘制一些坐标的小项目一起工作。matlab坐标

下面是我的csv文件的示例。数据的总线是约160000:

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坐标将会有相同或不同的值。

所以我想要做的是制作一个三维图,显示一个坐标有多少次命中,以及这些命中的值是什么,有点像直方图?

我的值的范围为X:30000 - 33000,Y:55000 - 56000和z:-1 - 23.

我试图使用筛目/ meshgrid上含有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) 

谢谢!

回答

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'); 
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)场计算坐标出现的频率。

+0

这就是我以为它应该是这样的,但你不期望我绘制160,000行Z(x,y)=值;在我的代码文件?我正在考虑像@Shai答案中的方式。无论如何,这个代码似乎有两个问题。虽然看起来似乎有效,但我从图中读取的数值不是100%正确的吗?另外我想,如果可能的话,每个z值都有实际的坐标。这会让我更容易从数字中读取,但不是必要的。感谢您和Shai的快速回复 – Celly 2013-02-27 20:47:57