2017-01-17 10 views
0

Ich versuche, ein gruppiertes Balkendiagramm in ggplot zu erstellen, in dem pro x-Wert 4 Balken stehen sollten. Hier ist eine Teilmenge meiner Daten (Ist-Daten über 4x länger):Gruppiertes Balkendiagramm in ggplot mit y-Werten basierend auf der Kombination von 2 kategorischen Variablen?

Verb_Type,Frame,proportion_type,speaker 
mental,V CP,0.209513024,Child 
mental,V NP,0.138731597,Child 
perception,V CP,0.017167382,Child 
perception,V NP,0.387528402,Child 
mental,V CP,0.437998087,Parent 
mental,V NP,0.144086707,Parent 
perception,V CP,0.042695836,Parent 
perception,V NP,0.398376853,Parent 

Was ich will, ist Rahmen wie die x-Werte und proportion_type wie die y-Werte plotten, aber mit den Bars auf der Grundlage sowohl Verb_Type und Redner. Für jeden x-Wert (Frame) gäbe es also 4 zusammengruppierte Balken - jeweils einen Balken für den proportion_type-Wert, der mentalem ~ Kind, mentalem ~ Eltern, Wahrnehmung ~ Kind, Wahrnehmung ~ Eltern entspricht. Ich muss für die Füllfarbe auf Verb_Type und die Füllung "Textur" (Sättigung oder etwas) basierend auf Lautsprecher basieren. Ich mache nicht wollen gestapelte Balken, da es die Daten nicht genau darstellen würde.

Ich möchte keine Facettengitter verwenden, weil ich es visuell schwierig finde, alle 4 Balken zu vergleichen, wenn sie in 2 Gruppen unterteilt sind. Ich möchte alle Balken zusammen gruppieren, damit die Visualisierung einfacher ist. Aber ich kann nicht herausfinden, wie man die richtigen Gruppierungen macht. Ist das etwas, was ich in ggplot tun kann, oder muss ich die Daten vor dem Plotten manipulieren? Ich habe versucht, mithilfe von Schmelze die Daten neu zu gestalten, aber entweder habe ich es falsch gemacht, oder das ist nicht das, was ich eigentlich tun sollte.

Antwort

0

Ich glaube, Sie suchen die interaction() (das heißt alle eindeutigen Paarungen erhalten) zwischen df$Verb_Type und df$speaker die Spaltengruppierungen sind Sie nach zu bekommen. Sie können diese direkt an ggplot geben oder eine neue Variable machen vor der Zeit:

ggplot(df, aes(x = Frame, y = proportion_type, 
       group = interaction(Verb_Type, speaker), fill = Verb_Type, alpha = speaker)) + 
    geom_bar(stat = "identity", position = "dodge") + 
    scale_alpha_manual(values = c(.5, 1)) 

Oder:

df$grouper <- interaction(df$Verb_Type, df$speaker) 
ggplot(df, aes(x = Frame, y = proportion_type, 
       group = grouper, fill = Verb_Type, alpha = speaker)) + 
    geom_bar(stat = "identity", position = "dodge") + 
    scale_alpha_manual(values = c(.5, 1)) 

enter image description here

+0

Das ist genau das, was ich gesucht habe! Die Gruppe = interaction() war was ich brauchte. Vielen Dank. – Ed2122

+0

Auch @Nathan Day, eine Follow-up-Frage: Ich nehme an, es ist möglich, die Bars in den Gruppierungen neu zu ordnen? so dass jedes Verb_Type-Balkenpaar nebeneinander liegt? – Ed2122

+0

Nevermind - um das zu tun, muss ich nur die Reihenfolge der Variablen in interaction() ändern. – Ed2122

Verwandte Themen