Seite 1 von 1

Rechnen in ggplot2s aes()

Verfasst: Mi Jul 10, 2019 6:53 pm
von hallasan
Guten Abend zusammen,

ich will eine Dichtefunktion mit ggplot2 plotten. Mit dem Befehl qplot funktioniert das einwandfrei:

Code: Alles auswählen

qplot(data$var[data$Typ=="post"] - data$var[data$Typ=="pre"], geom="density")
Ich würde allerdings gerne ein Histogramm plotten und darüber die Dichtefunktion legen. Deshalb probierte ich es mit ggplot. Ich bekomme es aber mit keinem der folgenden Befehle hin:

Code: Alles auswählen

ggplot(data=data, aes(data$var[data$Typ=="post"] - data$var[data$Typ=="pre"])) + geom_density()
 
ggplot(data=data, aes(var[data$Typ=="post"] - var[data$Typ=="pre"])) + geom_density()

ggplot(data=data, aes(var[Typ=="post"] - var[Typ=="pre"])) + geom_density()
Sondern bekomme nur den Fehler: Aesthetics must be either length 1 or the same as the data (48): x

Ist mein Vorgehen grundsätzlich nicht möglich oder wo steckt der Fehler?

Viele Grüße
hallasan

Re: Rechnen in ggplot2s aes()

Verfasst: Mi Jul 10, 2019 7:22 pm
von Hufeisen
Grundsätzlich kann man in der Funktion aes() rechnen, allerdings bekomme ich mit deinem Vorgehen die gleiche Fehlermeldung. Führe die Berechnung doch einfach außerhalb von ggplot durch. (Mein Beispiel ist inhaltlich natürlich Blödsinn.)

Code: Alles auswählen

# geht
ggplot(data = diamonds, aes(carat - price)) +
  geom_density()

# geht nicht
ggplot(data = diamonds, aes((diamonds$carat[diamonds$cut == "Good"] - diamonds$price[diamonds$cut == "Good"]))) +
  geom_density()

# warum nicht so?
test <- data.frame(neuer_wert = diamonds$carat[diamonds$cut == "Good"] - diamonds$price[diamonds$cut == "Good"])

ggplot(data = test, aes(neuer_wert)) +
  geom_density()

Re: Rechnen in ggplot2s aes()

Verfasst: Do Jul 11, 2019 12:29 pm
von hallasan
Danke für deinen Tipp!

Aus Gründen der Übersichtlichkeit versuche ich den Workspace immer so ordentlich wie möglich zu halten. Deshalb versuche ich die Berechnungen direkt durchführen zu lassen und nicht für jede Rechnung einen eigenen Dataframe zu erstellen.

Re: Rechnen in ggplot2s aes()

Verfasst: Do Jul 11, 2019 1:14 pm
von Hufeisen
Es reicht ja, das Ergebnis als neue Spalte deines df anzulegen.

Re: Rechnen in ggplot2s aes()

Verfasst: Do Jul 11, 2019 2:26 pm
von jogo

Code: Alles auswählen

library("ggplot2")
# geht
ggplot(data = diamonds, aes(carat - price)) +
  geom_density()

# geht:
ggplot(data = subset(diamonds, cut == "Good"), aes(carat - price)) +
  geom_density()
Gruß, Jörg

Re: Rechnen in ggplot2s aes()

Verfasst: Fr Jul 12, 2019 8:55 am
von Hufeisen
:idea: Tolle Lösung Jörg!