你如何躲避ggplot中的水平线范围?

How do you dodge a horizontal linerange in ggplot?

如何在 ggplot2 中躲避 ggstance::geom_linerangeh

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)

结果:

而我希望看到线条略低于水平线,与其他地方 position_dodge 的标准行为一致。

要进行闪避,您需要将颜色或线型映射到另一个变量,该变量根据第三个变量将 am 分成子类别;否则 am 的每个级别只有一个类别,因此没有什么可以躲避的。

例如,让我们使用 vs 作为另一个变量,我们将把它映射到颜色。我们还为 amvscyl 的缺失组合添加行(使用 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()