2017-11-04 16 views
0

棒グラフの中で年単位でデータを集計したい。このanswerに基づいて、私は次のコードを書いた:棒グラフ内の年単位のデータを集計する

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 しかし、唯一の目盛りが影響を受けているのが、データは区間によって加算されていません。ティックマークとラベルをそのままにして、データを前処理せずにデータを集計するggplot2を取得できますか?

編集:申し訳ありませんが明確ではありませんでした。私はティックマークとラベルをそのまま、つまり各バーの左端に位置する目盛り(今は5年をカバー)とラベルのみを保持したいと思います。これは上記のリンクされた答えの外観に基づいています。

+2

と空想何もする必要がないように、私はデータセットを変換することを好むが、これは何をあなたは期待していますか? 'ggplot(データ、エース(カット(年、5年)))+ geom_bar(エース(ウェイト=エフェクト))' – cderv

+0

はい、ありがとう@cderv!私はまた、x目盛りを正しく配置し、各インターバルの最初の年としてフォーマットしています(私が提供した図のように)。 – syre

+2

いくつかのランダム関数が実行される場合は、コードの先頭に 'set.seed(111)'(任意の数を引数として)を含めることをお勧めします。このようにして、他人はあなたが持っている正確なデータを得ることができます。 – echasnovski

答えて

0
あなたが欲しいものをやっての

少しハック方法:

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

enter image description here

それが実際に何:それは、高さと複数の列(棒)をプロットしeffectに等しいが、互いにベースの上に積み重ね5年間のインターバル識別子。言い換えれば、プロット上には実際には1つの色で48のバーがあり、お互いの上に配置されています。

0

このお試しください:返し

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() 

enter image description here

を私はggplot2

関連する問題