2013-02-27 89 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