2016-10-18 18 views
0

"ドッジ"を "ドッジド"に描くのに問題がありますstacked barsです。私が望む何R - ggplot2 geom_line dodge

dt = mtcars %>% group_by(am, cyl) %>% summarise(m = mean(disp)) 
dt0 = dt[dt$am == 0, ] 
dt1 = dt[dt$am == 1, ] 

dt0 %>% ggplot(aes(factor(cyl), m, fill = factor(cyl))) + geom_bar(stat = 'identity', position = 'dodge') + 
    geom_point(data = dt1, aes(factor(cyl), m, colour = factor(cyl)), position=position_dodge(width=0.9), colour = 'black') 

enter image description here

は黒ポイント各cylに積み重ねられたバーの上部からラインを描くことです。

dt0 %>% ggplot(aes(factor(cyl), m, fill = factor(cyl))) + geom_bar(stat = 'identity', position = 'dodge') + 
    geom_point(data = dt1, aes(factor(cyl), m, colour = factor(cyl)), position=position_dodge(width=0.9), colour = 'black') + 
    geom_line(data = dt1, aes(factor(cyl), m, colour = factor(cyl), group = 1), position=position_dodge(width=0.9), colour = 'black') 

ただし、position=position_dodge(width=0.9)ドッジはここでは機能しません。

+0

'注意geom_segmentを()'を使用するようにしてください。 – Jimbou

+0

残念ながら 'dodge'問題を解決しません – giacomo

+0

これはあなたが望むものではありませんか? ' – Jimbou

答えて

1

これはあなたの要約データを作り直す場合達成するためにはるかに簡単です:

dt <- mtcars %>% 
    group_by(am, cyl) %>% 
    summarise(m = mean(disp)) %>% 
    spread(am, m) 

    cyl  0  1 
* <dbl> <dbl> <dbl> 
1  4 135.8667 93.6125 
2  6 204.5500 155.0000 
3  8 357.6167 326.0000 

「0」と「1」が悪いの列名ですが、あなたがバッククォートでそれらを引用するならば、彼らはまだaes()で使用することができます。 position_dodge()への呼び出しも不要になる:

dt %>% ggplot(aes(x = factor(cyl), y = `0`, fill = factor(cyl))) + 
    geom_bar(stat = 'identity') + 
    geom_point(aes(x = factor(cyl), y = `1`), colour = 'black') + 
    geom_segment(aes(x = factor(cyl), xend = factor(cyl), y = `0`, yend = `1`)) 

enter image description here

+0

大変ありがとうございます – giacomo

関連する問題