MeshFunction im SmoothDensityHistogram
Ich möchte SmoothDensityHistogrameinen Datensatz erstellen, in dem ich auch das Wahrscheinlichkeitsniveau in bestimmten (konzentrischen) Regionen visualisieren kann. Hier ist der Code:
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]
Das Problem, das ich habe, besteht darin, die Wahrscheinlichkeit, die von jeder Netzlinie umgeben ist, direkt mit einem Etikett auf dem Plot anzugeben (ähnlich wie bei dem, was ContourPlotfunktioniert). Ich prüfe, MeshFunctionaber ich kann nicht zu den Ergebnissen kommen, die ich suche. Im Idealfall kann ich auch die gezeichneten Netzlinien bestimmen (z. B. entsprechend Wahrscheinlichkeiten von 60% und 80%).
BEARBEITEN
Ich habe auch den hier beschriebenen Ansatz ausprobiert:
Konturlinien über SmoothDensityHistogram
Es funktioniert gut bei der Identifizierung der Netzlinien. Ich kann jedoch immer noch nicht herausfinden, wie ich sie anhand der Wahrscheinlichkeit, dass sie sich befinden, beschriften soll (20, 40, 60 und 80% im Beispiel):
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]}}]]
Antworten
Wenn Sie die beiden Links in den Kommentaren kombinieren, können Sie Folgendes ausführen:
(* 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]}}]]