Sneha agrawal
Sneha agrawal

Reputation: 15

How can i count number of particles in each grid box in this code?

how can i count number of particles in each grid box in this code

here is my code below:

xyRange=[1,5];
P=3;
vx=0.6;  
vy=0.4;
X=[];
Y=[];
for day=1:5
    X=[X;randi(xyRange,P,1)];
    Y=[Y;randi(xyRange,P,1)];
    X=X+vx;
    Y=Y+vy;
end 
plot(X,Y,'kd');                
grid on;
axis([1,50,1,50]);
j = floor(X/5)+1; 
k = floor(Y/5);
box = k*10+j;

Upvotes: 1

Views: 980

Answers (1)

rayryeng
rayryeng

Reputation: 104514

If you have the Statistics Toolbox, the easiest way is to use hist3.

In your case, when I plotted the grid, it looks like each box was separated in units of 5. As such, the command is very simply this:

cnt = hist3([X,Y], {0:5:50 - 2.5, 0:5:50 - 2.5});    

X and Y are your 2D data points, and the second element is a cell array of X and Y values which denote the centres of each of the points in each grid. Take note that the points that are defined are with respect to the origin being at the top left corner. If you want to make sure that the origin is at the bottom left corner, you would actually need to do this:

cnt = flipud(cnt.');

On my run I get this:

cnt =

     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     1     6     0     0     0     0     0     0     0     0
     0     5     3     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0

When producing your plot, I get this:

enter image description here

If you compare the counts in comparison to the grid produced at the top, you'll see that the match. However, because of the way I specified the centre of the bins, the first and last row, and the first and last column are meaningless, so you can safely eliminate these from your analysis.

If you want a nice pictorial example of this, call hist3 without any output arguments:

%// Plot 2D histogram with some transparency
hist3([X,Y], {(0:5:50) - 2.5, (0:5:50) - 2.5}, 'FaceAlpha', 0.65);
%// Set height of each bar coloured according to height
set(get(gca,'child'),'FaceColor','interp','CDataMode','auto');
view(-34,68); %// Change camera view for better look

We get this:

enter image description here

Upvotes: 1

Related Questions