2016-12-01 14 views
1

私はデータフレームの積み重ね棒グラフを、データを変換せずに、解釈上の理由から作成したいと考えています。私のデータは次のようになります。ggplot 2列の棒グラフをスタック

#Code 
year <- c(1:5) 
burglaries <- c(234,211,201,150,155) 
robberies <- c(12, 19,18,23,25) 
total <- burglaries + robberies 
df <- data.frame(year, burglaries, robberies, total) 

#Output 
print(df) 

    year burglaries robberies total 
1 1  234  12 246 
2 2  211  19 230 
3 3  201  18 219 
4 4  150  23 173 
5 5  155  25 180 

私は次のように設定私のデータを変換することによって、私は必要なプロットを作成することができます。

df2 <- rbind(
     data.frame(year, "count" = burglaries, "type"="burglaries"), 
     data.frame(year, "count" = robberies, "type"="robberies") 
) 

ggplot(df2, aes(x=year, y=count, fill=type)) + 
    geom_bar(stat="identity") 

enter image description here

を同じプロットを作成する方法はありますデータフレームdf?データを変換することはできますが、プログラムで何が起こっているのかを追跡してエラーをキャッチするのが難しくなると心配します(使用しているデータセットはかなり大きい)。最終的には変換が必要とされて

+1

あなたはggplotを具体的に使用できるように設計された方法に対して作業しています。 ggplot _wants_あなたはあなたのデータをまず変換(融解、収集、整理、あなたがそれを呼びたいと思っているもの)します。短い答えはいいえ、本当はありません。 – joran

答えて

0

私はいくつかの追加の研究を行なったし、plotlyあなたはちょうどそれを行うことができますライブラリからplot_ly()機能を発見しました。ここでは詳細はリンクです:plotly website

plot_ly(data=df, x = ~year, y = ~burglaries, type = 'bar', name = 'Burglaries') %>% 
    add_trace(y = ~robberies, name = 'Robberies') %>% 
    layout(yaxis = list(title = 'Count'), barmode = 'stack') 

enter image description here

1

が、よりエレガントな方法はtidyrを使用することです:

df %>% 
    select(-total) %>% 
    gather(type, count, burglaries:robberies) %>% 
    ggplot(., aes(x=year, y=count, fill=forcats::fct_rev(type))) + 
    geom_bar(stat="identity") 
関連する問題