2017-07-30 73 views
1

你怎麼閃避ggplot2一個ggstance::geom_linerangeh你怎麼閃避ggplot水平linerange?

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成基於該第三個變量的子類另一個變量;否則,只有一個爲am,因此沒有躲閃每個級別類別。

例如,我們使用vs作爲其他變量,然後我們將其映射爲顏色。我們還爲am,vs和的缺失組合添加行(使用complete)以確保即使對於cylam的組合(其中在數據中僅存在vs的一個級別)的組合,也會出現閃避。

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