using Matlab to plot density contour for scatter plot
Mostrar comentarios más antiguos
Hi guys, I'm trying to use Matlab to plot the density contour for the following scatter plot. The bins will be 1X1 box. Within my limited understanding the density contour should be indicated how many points fall into the bins(correct me if I'm wrong), but I still cannot find a way to do the density plot. Need some help to solve this problem. Thanks!

Respuesta aceptada
Más respuestas (3)
Walter Roberson
el 30 de Jun. de 2015
Assuming that your data starts at 0 and contains fractional values and is to be binned by 1 x 1, and that your coordinates are in X and Y,
xidx = 1 + floor(X(:));
maxxoff = max(xidx) - 1;
yidx = 1 + floor(Y(:));
maxyoff = max(yidx) - 1;
counts = accumarray([yidx, xidx], 1); %remember Y corresponds to rows
imagesc(counts, 'XData', 1/2+[0 maxxoff], 'YData', 1/2+[0 maxyoff]);
hold on
contour(1/2+(0:maxxoff), 1/2+(0:maxyoff), counts)
The 1/2 offsets have to do with referencing the centers of the boxes.
Elena De Angelis
el 14 de En. de 2016
Editada: Walter Roberson
el 14 de En. de 2016
Hi, I'm trying to do the same but my result is not what I expect, could someone tell me please what i'm doing wrong?
x = dNBR_filt_CHANGE;
y = NBR_post_CHANGE;
scatter(x,y,'r.')
hold on
[n,c] = hist3([x, y]);
contour(c{1},c{2},n)

3 comentarios
Walter Roberson
el 14 de En. de 2016
Just in case they are row vectors,
[n,c] = hist3([x(:), y(:)]);
Hamdullah OZOGUL
el 1 de Feb. de 2018
Editada: Hamdullah OZOGUL
el 1 de Feb. de 2018
You just have to transpose the n to have the correct order.
contour(c{1},c{2},n')
Jos? Manuel Amigo
el 11 de Nov. de 2017
Editada: Walter Roberson
el 8 de Feb. de 2023
PCx = rand(2000,1); PCy = rand(2000,1);
bins = 50; Msize = 10;
[N C] = hist3([PCx,PCy],[bins bins]);
CX = C{1}; CY = C{2};
N2 = N; N2(N2 == 0) = []; Nunique = unique(N2);
colors = jet(length(Nunique));
for i = 1:length(PCx)
if isnan(PCx(i))
PCxnew(i,1) = NaN;
PCynew(i,1) = NaN;
J(i,1) = NaN;
else
whichoneX = find(min(abs(CX - PCx(i))) == abs(CX - PCx(i)));
PCxnew(i,1) = CX(whichoneX(1));
whichoneY = find(min(abs(CY - PCy(i))) == abs(CY - PCy(i)));
PCynew(i,1) = CY(whichoneY(1));
J(i,1) = sub2ind([bins,bins],whichoneX(1),whichoneY(1));
end
end
for i = 1:bins
for j = 1:bins
temp = sub2ind([bins,bins],i,j);
Jthese = find(J == temp);
if ~isempty(Jthese)
Ntemp = N(temp);
Nthis = find(Nunique == Ntemp);
plot(PCx(Jthese),PCy(Jthese),'.','color',colors(Nthis,:),'Markersize',Msize);
hold on;
end
end
end
hold off;
1 comentario
Jos? Manuel Amigo
el 11 de Nov. de 2017
Sorry for the bad pasting. But if you copy-paste, it works
Categorías
Más información sobre Contour Plots en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


