2017-11-04 7 views
0

Ich möchte Daten nach Jahr Intervall in einem Balkendiagramm aggregieren. Auf der Grundlage dieser answer schrieb ich den folgenden Code:Aggregierte Daten nach Jahr-Intervall in Balkendiagramm

years <- seq(as.Date('1970/01/01'), Sys.Date(), by="year") 
set.seed(111) 
effect <- sample(1:100,length(years),replace=T) 
data <- data.frame(year=years, effect=effect) 
ggplot(data, aes(year, effect)) + geom_bar(stat="identity", aes(group=cut(year, "5 years"))) 

enter image description here jedoch nur die Strichmarkierungen betroffen sind, aber die Daten nicht durch Intervall summiert. Kann ich mit ggplot2 die Daten ohne Vorverarbeitung der Daten summieren, während die Teilstriche und Beschriftungen unverändert bleiben?

EDIT: Sorry, ich war nicht klar. Ich möchte die Teilstriche und Beschriftungen so belassen, wie sie sind, d. H. Strichmarkierungen, die an der linken Kante jedes Strichs (die nun 5 Jahre umfasst) und Jahr nur in den Etiketten positioniert sind. Dies basiert auf dem Aussehen der oben stehenden verknüpften Antwort.

+2

Ist das, was du erwartest? 'ggplot (Daten, AES (Schnitt (Jahr," 5 Jahre "))) + Geom_Bar (AES (Gewicht = Effekt))' – cderv

+0

Ja, danke @cderv! aber ich versuche auch, die x-Markierungen korrekt positioniert und formatiert als das erste Jahr jedes Intervalls zu halten (wie in dem Diagramm, das ich zur Verfügung gestellt habe). – syre

+2

Es ist eine gute Idee, 'set.seed (111)' (mit einer beliebigen Zahl als Argument) am Anfang des Codes einzufügen, wenn eine zufällige Funktion ausgeführt wird. Auf diese Weise können andere die genauen Daten erhalten, die Sie haben. – echasnovski

Antwort

0

Leicht hacky Weg zu tun, was Sie wollen:

ggplot(data, aes(cut(year, "5 years"), effect)) + 
    geom_col() + 
    xlab("year") 

enter image description here

Was es tatsächlich tut: es mehrere Spalten (Balken) mit der Höhe Plots gleich zu effect aber auf der jeweils anderen gestapelt Based auf 5-Jahres-Intervallkennung. Mit anderen Worten, auf der Handlung gibt es tatsächlich 48 Balken mit einer Farbe, die aber übereinander liegen.

0

Try this:

library(tidyverse) 

df %>% 
    mutate(index = ceiling(seq_along(years)/5)) %>% 
    group_by(index) %>% 
    mutate(sum_effect = sum(effect)) %>% 
    distinct(sum_effect, .keep_all = TRUE) %>% 
    ggplot(aes(year, sum_effect)) + 
    geom_col() 

Welche zurück:

enter image description here

ich den Datensatz lieber verwandeln, so dass ich muss nichts tun Phantasie mit ggplot2

Verwandte Themen