你如何躲避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
作为另一个变量,我们将把它映射到颜色。我们还为 am
、vs
和 cyl
的缺失组合添加行(使用 complete
),以确保即使对于 cyl
和 am
其中数据中只有一级 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()
如何在 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
作为另一个变量,我们将把它映射到颜色。我们还为 am
、vs
和 cyl
的缺失组合添加行(使用 complete
),以确保即使对于 cyl
和 am
其中数据中只有一级 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()