MeshFunction w SmoothDensityHistogram
Chciałbym stworzyć SmoothDensityHistogramzestaw danych, w którym mógłbym również wizualizować poziom prawdopodobieństwa w pewnych (koncentrycznych) regionach. Oto kod:
somePoints =
RandomReal[BinormalDistribution[{-2, 2}, {1, 1}, .8], 1000];
SmoothDensityHistogram[somePoints,
Automatic, "PDF",
ColorFunction -> "DarkBands",
BaseStyle -> {FontSize -> 34, FontFamily -> "Arial"},
FrameStyle -> Directive[Black, AbsoluteThickness[3]],
ImageSize -> 800,
AspectRatio -> 0.5,
PlotRange -> All,
MeshStyle -> Black,
Mesh -> 5]
Problem, który mam, to wskazanie prawdopodobieństwa otoczonego przez każdą linię siatki bezpośrednio za pomocą etykiety na działce (podobnie jak to ContourPlotrobi). Szukam, MeshFunctionale nie mogę dojść do wyników, których szukam. W idealnym przypadku jestem również w stanie zdecydować, jakie linie siatki są wykreślane (np. Odpowiadające prawdopodobieństwom 60% i 80%).
EDYCJA
Wypróbowałem również podejście opisane tutaj:
Konturuj linie na SmoothDensityHistogram
sprawdza się dobrze w identyfikacji linii siatki. Jednak nadal nie mogę wymyślić, jak je oznaczyć według prawdopodobieństwa, że otaczają (w przykładzie 20, 40, 60 i 80%):
RandomReal[BinormalDistribution[{-2, 2}, {1, 1}, .8], 1000];
d = SmoothKernelDistribution[somePoints];
Show[SmoothDensityHistogram[somePoints,
Automatic, "PDF",
ColorFunction -> "DarkBands",
BaseStyle -> {FontSize -> 34, FontFamily -> "Arial"},
FrameStyle -> Directive[Black, AbsoluteThickness[3]],
ImageSize -> 800,
AspectRatio -> 0.5,
PlotRange -> All,
MeshStyle -> Black,
Mesh -> 0],
ContourPlot[PDF[d, {x, y}], {x, -4, 4}, {y, -5, 5},
PlotRange -> All,
Contours ->
Function[{min, max},
Rescale[{0.2, 0.4, 0.6, 0.8}, {0, 1}, {min, max}]],
ContourShading -> None,
ContourStyle -> {{Black, AbsoluteThickness[3]}}]]
Odpowiedzi
Łącząc dwa linki w komentarzach, można wykonać następujące czynności:
(* Generate some data *)
SeedRandom[12345];
somePoints = RandomVariate[BinormalDistribution[{-2, 2}, {1, 1}, 0.8], 1000];
(* Construct smooth kernel distribution *)
d = SmoothKernelDistribution[somePoints];
(* Find the pdf values on a fine grid and sort by value of pdf *)
pdf = Reverse[Sort[Flatten[Table[PDF[d, {x, y}], {x, -7, 3, 0.05}, {y, -3, 6, 0.05}]]]];
(* Obtain cdf of those values *)
cdf = Accumulate[pdf]/Total[pdf];
(* Give labels for probabilities of interest *)
probabilities = {"0.2", "0.4", "0.6", "0.8"};
(* Determine contours associated with each probability *)
contours = pdf[[Flatten[Table[FirstPosition[cdf, p_ /; p >= alpha], {alpha, ToExpression[probabilities]}]]]];
(* Construct link between the contours and the probability labels along with the desired style of text *)
link = AssociationThread[contours -> probabilities];
f = Text[Style[link[#3], 15, Bold, Red], {#1, #2}] &;
(* Plot results *)
Show[SmoothDensityHistogram[somePoints, Automatic, "PDF", ColorFunction -> "DarkBands",
BaseStyle -> {FontSize -> 34, FontFamily -> "Arial"},
FrameStyle -> Directive[Black, AbsoluteThickness[3]], ImageSize -> 800,
AspectRatio -> 0.5, PlotRange -> All, MeshStyle -> Black, Mesh -> 0],
ContourPlot[PDF[d, {x, y}], {x, -7, 3}, {y, -3, 6}, PlotRange -> All,
Contours -> contours, ContourLabels -> f, ContourShading -> None,
ContourStyle -> {{Black, AbsoluteThickness[3]}}]]