你可以事先做一点整形。你需要一些逻辑来连接红条(
group1a
group1b
),蓝色和紫色条也是如此。在这种情况下,通用性是组号。创建组号变量的最简单方法(至少是使用现有的数据)就是为组中除最后一个字符以外的所有字符进行子集设置。如果组变得更复杂,可以使用正则表达式。
position = "identity"
在你的内心
geom_col
,您可以放置条,而不管它们是否相互重叠。
library(tidyverse)
data_split <- data_ggp %>%
mutate(group_num = str_sub(group, 1, -2))
head(data_split)
#> category values group group_num
#> 1 cat1 0.664 group1a group1
#> 2 cat2 0.045 group1a group1
#> 3 cat3 0.291 group1a group1
#> 4 cat1 0.482 group1b group1
#> 5 cat2 0.029 group1b group1
#> 6 cat3 0.489 group1b group1
现在你可以使用
group_num
在x轴上放置条的步骤。一种方法是使用这些组和类别之间的交互:
ggplot(data_split, aes(x = interaction(group_num, category), y = values, fill = group)) +
geom_col(position = "identity", alpha = 0.4)
另一种方法是将组号放置在x轴上,然后按类别进行镶嵌。您可以调整主题元素,使facet看起来不那么像facet,而更像x轴上的大组,但我将把这留给其他SO问题的建议。
ggplot(data_split, aes(x = group_num, y = values, fill = group)) +
geom_col(position = "identity", alpha = 0.4) +
facet_wrap(~ category)
注意
geom_col
相当于
geom_bar(stat = "identity")
,为了显示重叠,我把alpha调小了。
于2018年11月26日由
reprex package
(v0.2.1)