我正在处理一个小项目,涉及在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行的样本文件上使用mesh/meshgrid,它工作了。但是x y z坐标总是放错位置即使我试着重新排列列或者转置矩阵。
注意:当我用我的原始文件尝试代码时,我得到了"内存不足"错误。Matlab不能接受大量的数据吗?还是我的代码出了问题?
我尝试的简单代码如下所示:x = test(:, 1);
y = test(:, 2);
z = test(:, 3);
zz = [x,y,z];
%R = meshgrid(zz);
%mesh(R);
mesh(zz)
提前感谢!
如何使用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' );
我会这样写:
[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)
注意:- size(X) == size(Y)
我要做的是做一个3D图显示一个坐标有多少次命中,命中的值是多少,有点像直方图?
您可以增加相应的Z(i,j)字段来计算坐标出现的频率。