2017-07-30 9 views
1

ggstance::geom_linerangehさんをどのようにしてggplot2に騙しますか?中ggplotにはどのように水平な地平線をかぶりますか?

library(tidyverse) 
library(ggstance) 

mtcars %>% 
    group_by(cyl, am) %>% 
    summarize(lo = mpg %>% min, 
      hi = mpg %>% max) %>% 
    ggplot() + 
    geom_linerangeh(aes(y = am %>% 
        factor, 
        xmin = lo, 
        xmax = hi, 
        group = am %>% 
        factor), 
       position = position_dodgev(height = .25)) + 
    facet_wrap(~cyl, ncol = 1) 

結果:

enter image description here

私は他の場所position_dodgeの標準的な動作と一致し、わずか水平位置の下に座ってラインを見たいのですが、一方。

答えて

2

覆い焼きを取得するには、カラーまたは線種を、amをその3番目の変数に基づいてサブカテゴリに分割する別の変数にマップする必要があります。そうでなければ、amの各レベルには1つのカテゴリしかないので、かわすことはありません。

たとえば、他の変数としてvsを使用して、それをcolorにマップします。また、amvs、およびcylの行方不明の組み合わせに対して行を追加し(completeを使用)、データにvsの1つのレベルしか存在しないcylamの組み合わせに対しても覆い焼きが確実に発生するようにします。

library(tidyr) 

mtcars %>% 
    group_by(vs=factor(vs), cyl=factor(cyl), am=factor(am)) %>% 
    summarize(lo = mpg %>% min, 
      hi = mpg %>% max) %>% 
    ungroup() %>% 
    complete(am, cyl, nesting(vs)) %>% 
    ggplot() + 
    geom_linerangeh(aes(y = am, colour=vs, xmin = lo, xmax = hi), 
        position = position_dodgev(height = 0.5)) + 
    facet_wrap(~cyl, ncol = 1) + 
    theme_bw() 

enter image description here

+1

あなたががたい場合は、 'グループ= vs'を使用することができます。 –

+0

はい、しかし、異なるレベルの 'vs 'の行は区別できません。 – eipi10

関連する問題