using Matlab to plot density contour for scatter plot
39 ビュー (過去 30 日間)
古いコメントを表示
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!
0 件のコメント
採用された回答
Mike Garrity
2015 年 6 月 30 日
Scatter doesn't do any binning. It's showing each individual data element.
Perhaps this approach does what you want?
x = randn(1,1000);
y = randn(1,1000);
n = hist3([x', y']);
pcolor(n)
4 件のコメント
Andrea Ackroyd
2018 年 12 月 3 日
I am commenting on this old post because I am doing a very similar thing, but achieving some unexpected results.
I am making a histogram2 (tile view) of one dataset, which is time samples of two variables. On the same axes I plot a contour of a map which comes from different data (essentially a target map for the time based data which is in the histogram).
The unusual behaviour is that the colour scale of the hist2 appears to be affected by having the contour on the same axes.
If it is noteworthy, I am plotting the contour first, with a solid colour for all contour lines (not using colormap). Then I plot the histogram second.
その他の回答 (3 件)
Walter Roberson
2015 年 6 月 30 日
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.
0 件のコメント
Elena De Angelis
2016 年 1 月 14 日
編集済み: Walter Roberson
2016 年 1 月 14 日
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 件のコメント
Hamdullah OZOGUL
2018 年 2 月 1 日
編集済み: Hamdullah OZOGUL
2018 年 2 月 1 日
You just have to transpose the n to have the correct order.
contour(c{1},c{2},n')
Jos? Manuel Amigo
2017 年 11 月 11 日
編集済み: Walter Roberson
2023 年 2 月 8 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Data Distribution Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!