Binning 2D set of coordinates

조회 수: 13 (최근 30일)
Akhil Ghanta
Akhil Ghanta 2015년 6월 19일
편집: Walter Roberson 2016년 10월 13일
I'm pretty new to MATLAB, so sorry if this seems easy. I've got a single long trajectory for a particle below. I have about 100,000 X and Y coordinates from which I've assembled the graph. I'm trying to create a density plot of the coordinates to show where the trajectory is most concentrated. I'm trying to create a density plot of the coordinates to show where the trajectory is most concentrated. I've got the second plot using the following code:
bins = 200;
binsizeX = 3/bins;
binsizeY = 1.2/bins;
xbins = -1.5:binsizeX:1.5;
ybins = -0.6:binsizeY:0.6;
[nx,idxx] = histc(X,xbins);
[ny,idxy] = histc(Y,ybins);
out = accumarray([idxx,idxy], 1);
figure(2);
hold on;
h=imagesc(xbins,ybins,out);hold on;
colorbar; hold on;
axis([-1.5 1.5 -0.6 0.6]); hold on;
But it seems that the density is shifted up and to the right for some reason? Any help is appreciated! Thanks!

답변 (4개)

alessandro
alessandro 2016년 10월 13일
편집: Walter Roberson 2016년 10월 13일
Old post, but will try to answer anyway, in case anybody else end up with same issue.
The easiest way to do what you are willing to do is to use hist3 function, with which binning resolution is user dependent and density matrix can be stored easily.

Katalin
Katalin 2015년 6월 19일
imagesc flips the image I think. This is from the help: imagesc(x,y,C) displays C as an image and specifies the bounds of the x- and y-axis with vectors x and y. If x(1) > x(2) or y(1) > y(2), the image is flipped left-right or up-down, respectively.
  댓글 수: 1
Akhil Ghanta
Akhil Ghanta 2015년 6월 19일
편집: Akhil Ghanta 2015년 6월 19일
If that's true why are the axes still going in the proper direction on the plot? Also, for my vectors x(1)<x(2) and y(1)<y(2)

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2015년 6월 19일
With images, since they are arrays, line 1 (row 1) is at the top, and the line numbers get bigger as you go down the screen. This is the standard custom with images.
With a plot, since it's like regular Cartesian coordinates, where the "y" value increases as it goes up the screen.
The right/left are not flipped, just the up/down. You could use flipud(out) to flip the image vertically before displaying it if you want the plot and image to look similar.
imagesc(xbins, ybins, flipud(out));
  댓글 수: 2
Akhil Ghanta
Akhil Ghanta 2015년 6월 19일
편집: Akhil Ghanta 2015년 6월 19일
Well now, the density is just flipped. The slope of the ellipse is now negative. The big thing is that the density isn't centered like the original trajectory is in the original post.
Image Analyst
Image Analyst 2015년 6월 20일
Is the centroid supposed to be at (0,0)? Please attach your data file with the paper clip icon, along with code to read it in.

댓글을 달려면 로그인하십시오.


Walter Roberson
Walter Roberson 2015년 6월 19일
out = accumarray([idxx,idxy], 1);
should be
out = accumarray([idxy,idxx], 1);
Height (y) is expressed as row number so the y index needs to be first.
  댓글 수: 2
Akhil Ghanta
Akhil Ghanta 2015년 6월 19일
This did seem to fix the slope of the density ellipse, but it's still not centered on the origin like I'd expect it to be.
Walter Roberson
Walter Roberson 2015년 6월 20일
Could you attach the data as a file?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Annotations에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by