Rechnen in ggplot2s aes()

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
hallasan
Beiträge: 5
Registriert: Mi Jul 10, 2019 6:45 pm

Rechnen in ggplot2s aes()

Beitrag 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
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Rechnen in ggplot2s aes()

Beitrag 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()
hallasan
Beiträge: 5
Registriert: Mi Jul 10, 2019 6:45 pm

Re: Rechnen in ggplot2s aes()

Beitrag 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.
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Rechnen in ggplot2s aes()

Beitrag von Hufeisen »

Es reicht ja, das Ergebnis als neue Spalte deines df anzulegen.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Rechnen in ggplot2s aes()

Beitrag 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
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Rechnen in ggplot2s aes()

Beitrag von Hufeisen »

:idea: Tolle Lösung Jörg!
Antworten