how to do density scatter plot?
조회 수: 2 (최근 30일)
이전 댓글 표시
I have a cubic box with the size of, lets say 300 in each direction. I have some data (contains X,Y,Z coordinates) which represent the distribution of nearly 1 million data-points within this box. I want to specify a color to their Number density (its an intensive quantity used to describe the degree of concentration of countable objects in this case data-points). In another word, Using color to illustrate which part is more condensed in terms of data-points rather than the other parts. The index for the color-bar in the final image should represent the percentage of data-points specified with that color.
I have tried to do it by dividing the whole space in cubic box to 1 million smaller cube (each cube has a length of 3 in all direction). By counting the number of particles within those cube, I will know how they distributed in the box and the number of existed data-points within. Then I can specify a color to them which I wasn’t successful in counting and specifying. Any suggestion is appreciated.
%reading the files
[FileName,PathName,FilterIndex] = uigetfile('H:\*.txt','MultiSelect','on');
numfiles = size(FileName,2);
j=1;
X=linspace(0,300,100);
for ii = 1:numfiles
FileName{ii}
entirefile = fullfile(PathName,FileName{ii});
a = importdata(entirefile);
x = a(:,2);
y = a(:,3);
z = a(:,4);
for jj = 2:size(X,2) % loop over all points
if x(:)<X(jj) & y(:)<X(jj) & z(:)<X(jj)
x;
end
end
h=figure(j);
scatter3(x, y, z, 'filled', 'MarkerSize', 20);
cb = colorbar();
cb.Label.String = 'density estimate';
end
I need to get a similar result like the following image. but I need the percentage of data-point specified by each color. Thanks in advance.
채택된 답변
darova
2019년 8월 5일

C = x*0;
for i = 1:length(x)
v = (abs(x-x(i)) < R) & (abs(y-y(i)) < R) & (abs(z-z(i)) < R); % how many points in cube
% v = (x-x(i)).^2 + (y-y(i)).^2 + (z-z(i)).^2 < R^2; % or sphere
C(i) = sum(v)-1; % number of points except x(i)
end
scatter3(x,y,z,10,C)
You can also visualize your data with contourslice()
댓글 수: 9
darova
2019년 8월 6일
Vector C has number of neighbour points for specified radius
C(i) = sum(v)-1;
For example: radius = 5

If you want percentage

scatter3(x,y,z,5,C/max(C)*100,'fill') % percentage
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


