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 » Mi Jul 10, 2019 6:53 pm

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: 131
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Rechnen in ggplot2s aes()

Beitrag von Hufeisen » Mi Jul 10, 2019 7:22 pm

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 » Do Jul 11, 2019 12:29 pm

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: 131
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Rechnen in ggplot2s aes()

Beitrag von Hufeisen » Do Jul 11, 2019 1:14 pm

Es reicht ja, das Ergebnis als neue Spalte deines df anzulegen.

jogo
Beiträge: 1539
Registriert: Fr Okt 07, 2016 8:25 am

Re: Rechnen in ggplot2s aes()

Beitrag von jogo » Do Jul 11, 2019 2:26 pm

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: 131
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Rechnen in ggplot2s aes()

Beitrag von Hufeisen » Fr Jul 12, 2019 8:55 am

:idea: Tolle Lösung Jörg!

Antworten