2017-09-05 6 views
1

次のデータフレームでは、ggplotを使用していくつかのバープロットを作成します。geom_barのバーの幅が等しくない

df <- data.frame(Disease = c("Disease1","Disease2","Disease3","Disease3","Disease3","Disease4","Disease5","Disease5","Disease6","Disease4","Disease2","Disease2","Disease1","Disease7","Disease1","Disease1","Disease7","Disease6","Disease3","Disease6"), 
        Week = c(3,52,46,47,19,39,42,46,44,45,46,42,45,48,44,44,43,42,45,47), 
        Year = c(2015,2015,2015,2016,2015,2015,2016,2016,2015,2015,2015,2015,2016,2016,2016,2015,2016,2016,2016,2015), 
        Number = c(1,1,6,5,1,1,4,12,4,15,6,15,6,11,4,2,9,1,4,1)) 

私はいくつかの棒グラフを使用します。

ggplot(df, aes(factor(Week), Number)) + 
    geom_bar(stat="identity" , aes(fill = factor(Year)), position = "dodge") + 
    facet_wrap(~ Disease, ncol = 2, scales = "free_y") + 
    labs(x = "Week", y = "Number") + 
    scale_fill_discrete(name = "Year") 

enter image description here

しかし、私は(幅の違いのために病1を参照)と同じ幅を持っているすべてのバーをしたいと思います。私はすでに答えを見つけましたBars in geom_bar have unwanted different widths when using facet_wrapしかし、私は私の例でこれを動作させることはできません。誰かが私の問題の解決策を持っていますか? 明らかに、私の元のデータセットははるかに大きく、バーの幅が違うという問題は、上記の例よりずっと頻繁に発生します。

答えて

3

library(tidyverse) 
df2 = df %>% 
    complete(Disease, Week, Year, fill = list(Number = 0)) 

ggplot(df2, aes(factor(Week), Number)) + 
    geom_bar(stat="identity" , aes(fill = factor(Year)), position = "dodge") + 
    facet_wrap(~ Disease, ncol = 2, scales = "free_y") + 
    labs(x = "Week", y = "Number") + 
    scale_fill_discrete(name = "Year") 

あなたはまた、あなたが取得する0.1のような少数の充填試みることができます各x軸の位置にいくつかの小さな棒があります - これは、各バーのスペースがあることを明確にするのに役立ちますが、偽の値が混乱する可能性があると考えています:

+0

ありがとう!私の完全なデータセットでは完全には機能しませんでしたが(一部のバーはまだ広かったですが)、構文がdf2に変更された後、group_by(Disease)%>%complete(Week、Year、fill = list(Number = 0)働く –

0

これは正常です:x軸では、すべてのユニットの軸上のスペースは同じです(ここでは1週間)。

2015年、2016年、none、またはその両方の週があります。両方の年がある場合、週単位は1年しかない場合と同じです。だから両方の年がプロットされるとき、「ユニットのための空間」は2つに分割され、したがって2倍小さいバーが分割されます。

"問題"は、facet_wrapではなく、位置= "ドッジ"のため、バーを横に並べて表示されます。

コリン・

あなたは各病+週+年度の0とのデータセットを記入してこの問題を解決することができ
関連する問題