How to plot bivariate cumulative probability centred to a point?
1 回表示 (過去 30 日間)
古いコメントを表示
Hi,
I am trying to create a probability contour plot from a scatter plot centred in the areas with the largest density.
Basically going from this:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/193304/image.jpeg)
To this:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/193305/image.jpeg)
Where:
Probability for a point to be in the red area is 68% Probability for a point to be in the yellow area is 95% Probability for a point to be in the green area is 99.7% Probability for a point to be in the blue area is 99.99%
(I am not sure about my colour choices, I should probably have drawn it from blue being 68% to red being 99.99%).
x = randn(1000,1) + randn(1000,1);
y= randn(1000,1) + randn(1000,1);
X = [x,y];
N=histcounts2(x,y);
N1 = histcounts2(x,y,'Normalization','countdensity');
N2 = histcounts2(x,y,'Normalization','cumcount');
N3 = histcounts2(x,y,'Normalization','probability');
N4 = histcounts2(x,y,'Normalization','pdf');
N5 = histcounts2(x,y,'Normalization','cdf');
figure
subplot(3,3,1);
scatter(x,y, '.');
title('Scatter plot of the data');
subplot(3,3,2); %to visualize the density for each bin
h = histogram2(x,y,'DisplayStyle','tile','ShowEmptyBins','on');
title('Density plot from the data - using histogram2');
subplot(3,3,3);
contour(N);
colorbar
title('contour plot - using histcounts2 - default normalization');
subplot(3,3,4);
contour(N1);
colorbar
title('contour plot - using histcounts2 - countdensity normalization');
subplot(3,3,5);
contour(N2);
colorbar
title('contour plot - using histcounts2 - cumcount normalization');
subplot(3,3,6);
contour(N3);
colorbar
title('contour plot - using histcounts2 - probability normalization');
subplot(3,3,7);
contour(N4);
colorbar
title('contour plot - using histcounts2 - pdf normalization');
subplot(3,3,8);
contour(N5);
colorbar
title('contour plot - using histcounts2 - cdf normalization');
I get the following outcome from running this code (note that outcomes might vary due to the random nature of the first two lines of code):
N =
0 0 0 0 0 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0
0 0 1 7 2 3 1 1 0 0
0 1 1 15 15 14 12 0 0 0
2 3 7 31 43 40 32 10 1 0
0 2 22 40 65 64 46 22 4 1
0 3 22 42 71 61 38 8 5 1
0 3 7 21 46 51 25 11 1 1
0 0 3 6 15 11 10 6 0 0
0 0 2 2 5 1 4 2 0 0
0 0 0 1 2 1 0 1 0 0
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/193307/image.png)
The result is as expected, as the 'cumcount' or 'cdf' starts its cumulative count from the origin of the matrix (cf. Matlab documentation - histcounts2 -> Output arguments -> N> ).
Is there any way to 'cumcount' or 'cdf' centered in the most dense area so that I have an output similar to the one hand drawn? Basically, I would like to centre it to (5,7) for N, as it is its largest value (71).
Thank you in advance,
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Annotations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!