2017-02-17 5 views
1

Ich erstelle zwei Balkendiagramme, das erste, dessen Höhe eine Summe von 3 Werten darstellt, die ich mit separaten Farben anzeigen möchte. Ich kann dieses Diagramm wie gezeigt erzeugen:Kombinieren von gestapelten und nebeneinander liegenden Balkendiagrammen

library(reshape) 
library(ggplot2) 
data1 <- data.frame("Year" = c(2011, 2012, 2013, 2014, 2015, 2016), 
         "Item1" = c(47.3, 46.3, 49.9, 50.1, 50.9, 47.2), 
         "Item2" = c(26.9, 58.9, 2.0, 11.5, 11.5, 5.3), 
         "Item3" = c(25.8, 24.9, 24.9, 25.4, 25.3, 25.6)) 
mdata <- melt(data1, id.var = "Year") 
plot(ggplot(mdata, aes(x = Year, y = value, fill = variable)) + 
    geom_bar(stat = "identity")) 

Meine zweite Handlung ist einfacher, nur ein einzelner Stab, dessen Wert die Höhe des Stabes bestimmt. Code, der Handlung zu erzeugen ist:

data2 <- data.frame("Year" = c(2011, 2012, 2013, 2014, 2015, 2016), 
         "Value" = c(85.1, 83.4, 86.9, 87.6, 88.4, 85.6)) 
plot(ggplot(data2, aes(x = Year, y = Value)) + 
    geom_bar(stat = "identity")) 

Ich würde diese beiden Bars nebeneinander in der gleichen Parzelle zeigen mögen, so dass 2011 gruppiert 2012 gruppiert ist, etc. Ich kann nicht herausfinden, wie man füge das zweite Diagramm hinzu. Irgendeine Hilfe? Vielen Dank!

+1

Nur um zu verdeutlichen, möchten Sie die Jahre entlang der X-Achse haben, und für jedes Jahr möchten Sie 2 Bars: ein Balken, der eine Summe von 3 Werten ist, und einen, der ein einzelner Balken ist ? Wenn das richtig ist, müssen die 3 Werte in verschiedene Farben unterteilt werden, oder reicht es aus, die kombinierte Summe als einen Balken darzustellen? – BLT

+0

@BLT Sehen Sie dies: http://StackOverflow.com/Questions/11604070/issue-with-ggplot2-geom-bar-and-position-dodge-stacked-has-correct-y-values#11620735, scheint, können wir ' t haben beide "position =" ausweichen "und" stack ", was etwas sinnvoll ist. Diese Antwort ist sehr alt, etwas, von dem ich nichts weiß, könnte sich geändert haben – GGamba

+0

@GGamba yep, das ist im Grunde die gleiche Frage, und meine Antwort würde lauten: "Versucht, die Item # s vor dem Plotten zu aggregieren". – BLT

Antwort

0

Danke für das Feedback jedermann. Aufgrund der Antworten entschied ich mich, meinen Ansatz etwas zu ändern und verwendete ein Liniendiagramm anstelle des zweiten Balkendiagramms. Dies teilt die gleiche Information mit, nur nicht das, was ich ursprünglich wollte. Danke noch einmal!

0

Sie können eine Gruppierungsspalte hinzufügen und diese stattdessen auf einer diskreten Skala darstellen.

data3 <- merge(data1, data2, by = 'Year') 
data3 <- melt(data3, id.var = 'Year') 
data3$gr <- paste0(data3$Year, ifelse(data3$variable == 'Value', '.b', '.a')) 

ggplot(data3, aes(x = gr, y = value, fill = variable)) + 
    geom_col() 

Oder mit dplyr, wenn Sie es gerade durch

data1 %>% full_join(data2) %>% 
    gather(Item, value, -Year) %>% 
    mutate(gr = paste0(Year, ifelse(Item == 'Value', '.b', '.a'))) %>% 

    ggplot(aes(x = gr, y = value, fill = Item)) + 
    geom_col() 

Dies gibt das Aussehen des Zeichnens ausweichen Rohr wollen und gleichzeitig stapeln. Ein Nachteil ist jedoch, dass die Beschriftungen auf der Y-Achse die Gruppierungsvariable anstelle des Jahres widerspiegeln. Ich habe versucht, diese ein paar Mal zuvor zu ändern, habe es aber nicht herausgefunden.

enter image description here

Verwandte Themen