ggplot2: Von stat_density2d() berechneten level auslesen

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
Curnen
Beiträge: 22
Registriert: Fr Nov 18, 2016 3:45 pm

ggplot2: Von stat_density2d() berechneten level auslesen

Beitrag von Curnen » Mi Jan 10, 2018 12:20 pm

Hallo liebe Leute,

Ich brauche mal wieder eure Hilfe mit einem zweidimensionalen Datensatz, den ich gerne mit ggplot2 als Streudiagramm darstellen würde. Ein Großteil der Datenpunkte konzentriert sich auf wenige Bereiche, sodass da viele Punkte ununterscheidbar aufeinander liegen. Deswegen nutze ich als Hauptebene stat_density2d(), möchte aber eine zusätzliche Ebene mit geom_point() nutzen, um Streuung in Bereiche geringer Dichte zeigen zu können.

Nachfolgendes Minimalbeispiel ist dazu schon ganz passabel geeignet, aber durch die zufällige Auswahl der für geom_point() dargestellten Punkte ziehe ich mit sample() natürlich auch viele Punkte, die sowieso von dem geom_polygon() layer verdeckt werden. Wenn man ein pdf anstatt eines png/jpgs erzeugt wird jeder Punkt trotzdem gezeichnet, auch wenn er später nicht sichtbar ist und eine Figure wird direkt mehrere Megabyte groß...

Code: Alles auswählen

library("ggplot2")

plotdata <- data.frame(x = rnorm(1e4, mean = 10, sd = 3),
                       y = rnorm(1e4, mean = 8, sd = 7))

theplot <- ggplot(plotdata, aes(x = x, y = y)) + theme_bw() +
  geom_point(
    color = "#000000",
    alpha = 1,
    size = 0.1,
    data = plotdata[sample(c(1:dim(plotdata)[1]), 1e3, replace =
                             FALSE),]
  ) +
  stat_density2d(aes(fill = ..level.., alpha = ..level..),
                 geom = "polygon",
                 bins = 10) 


theplot
Meine Frage ist nun, ob ihr eine Möglichkeit kennt, den von stat_density2d() ermittelten level-Wert auszulesen oder anderweitig vorab zu berechnen?
Dann könnte ich an geom_point() nämlich nur ein subset der Punkte übergeben, die beispielsweise den level <= 0.002 hätten...

Code: Alles auswählen

#geht so leider nicht...
  geom_point(
    color = "#000000",
    alpha = 1,
    size = 0.1,
    data = plotdata[theplot[["data"]][,"level"]<= 0.002,]
  )
Vielen Dank!
Matthias

Benutzeravatar
EDi
Beiträge: 587
Registriert: Sa Okt 08, 2016 3:39 pm

Re: ggplot2: Von stat_density2d() berechneten level auslesen

Beitrag von EDi » Mi Jan 10, 2018 9:45 pm

Hier gibts anregungen dafür

Code: Alles auswählen

https://github.com/slowkow/ggrepel/issues/48
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.

Curnen
Beiträge: 22
Registriert: Fr Nov 18, 2016 3:45 pm

Re: ggplot2: Von stat_density2d() berechneten level auslesen

Beitrag von Curnen » Mi Jan 10, 2018 11:40 pm

Hallo EDi,

Mal wieder: DANKE DANKE DANKE!

Du hast nicht nur mein aktuelles Problem gelöst (die getLevel Funktion ist mehr als ausreichend für meine Bedürfnisse) sondern mit dem Hinweis mich auch noch mit der Nase auf die mir bislang nicht bekannten Pakete ggrepel und ggpmisc gestoßen. Beide sehen sehr vielversprechend aus: ggrepel hat mich sofort begeistert und für ggpmisc habe ich bestimmt auch noch Verwendung.

Viele Grüße
Matthias

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast