SmoothDensityHistogram'da MeshFunction

Oct 22 2020

SmoothDensityHistogramBelirli (eş merkezli) bölgelerdeki olasılık düzeyini de görselleştirebileceğim bir veri seti yapmak istiyorum . İşte 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]

Sahip olduğum sorun, her bir örgü çizgisinin çevrelediği olasılığı doğrudan arsa üzerindeki bir etiketle (ne yaptığına benzer ContourPlot) göstermektir. Araştırıyorum MeshFunctionama aradığım sonuçlara ulaşamıyorum. İdeal olarak, çizilen örgü çizgilerine de karar verebilirim (örneğin,% 60 ve% 80 olasılıklara karşılık gelir).

DÜZENLE
Burada açıklanan yaklaşımı da denedim:

SmoothDensityHistogram üzerinden kontur çizgileri

örgü çizgilerini belirlemede iyi çalışır. Bununla birlikte, onları kuşatma olasılığına göre nasıl etiketleyeceğimi hala çözemiyorum (örnekte% 20, 40, 60 ve 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]}}]]

Yanıtlar

3 JimB Oct 22 2020 at 05:21

Yorumlarda iki bağlantıyı birleştirerek aşağıdakileri gerçekleştirebilirsiniz:

(* 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]}}]]