R语言 通过多个变量隐藏点和错误条ggplot2

u2nhd7ah  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一些数据,我正在绘制一个值和95% CI。我有四个分组变量,由于一些不可改变的原因,我想只用一个变量来分面。

var1 = as.factor(c("x", "y", "z"))
var2 = as.factor(c("a", "b", "c"))
var3 = as.factor(c("one", "two", "three"))
var4 = as.factor(c("lorem", "ipsum"))

df <- expand.grid(var1, var2, var3, var4) 
names(df) <- c("var1", "var2", "var3", "var4")

df$mean <- sample(seq(-10, 10, 0.1), nrow(df), replace = FALSE)
df$stderr <- sample(seq(1, 5, 0.01), nrow(df), replace = FALSE)

df <- df %>% 
  dplyr::mutate(
    up = mean + (1.96 * stderr),
    lo = mean - (1.96 * stderr)
  )

ggplot(data = df) + 
  geom_errorbar(aes(x = var1, ymin = lo, ymax = up,
                    group = var3), 
                position = position_dodge(width = 0.8),
                width = 0) + 
  geom_point(aes(x = var1, y = mean, fill = var3, group = var3,
                 shape = var4),
             position = position_dodge(width = 0.8), size = 3) + 
  scale_shape_manual(values = c(21, 22)) + 
  scale_fill_manual(values = c("blue", "red", "green")) + 
  facet_wrap(~var2) +
  theme_bw()

图看起来几乎完全是我想要的,因为我可以使用position_dodge()通过一个变量(即在这种情况下是填充变量)。我的挑战是 * 在 * 每个填充颜色中,我希望能够通过形状再次position_dodge(),以便误差条和点不在x轴上完全相同的位置,因此,不会重叠在彼此的顶部。也就是说,例如在最左边的前两组点中,蓝色正方形和蓝色圆圈位于完全相同的x轴点上,因此误差条完全重叠,但我希望能够将它们减淡到彼此相邻,因此有两个减淡值,var3 * 和 * var4
我不知道如何做到这一点,有人知道你是否可以用group =参数或其他方法来做到这一点吗?谢谢!

pqwbnv8z

pqwbnv8z1#

所以在我的所有挖掘中,我发现group不能接受多个参数,所以为了达到我想要的终点,我找到了一个可以通过的答案,利用@teunbrand的酷函数facet_nestedggh4x包,和他们的后续答案here。理想情况下,我会有点分组与每个颜色的每个x轴标签旁边的对方,但这绝对工作!

strips <- strip_nested(
  text_x = list(element_text(), element_blank()),
  background_x = list(element_blank(), element_blank()), 
  by_layer_x = TRUE
)

ggplot(data = df, aes(fill = var3, group = var3, shape = var4)) + 
  geom_errorbar(aes(x = var1, ymin = lo, ymax = up), 
                position = position_dodge(width = 0.8),
                width = 0) + 
  geom_point(aes(x = var1, y = mean),
             position = position_dodge(width = 0.8), size = 3) + 
  scale_shape_manual(values = c(21, 22)) + 
  scale_fill_manual(values = c("blue", "red", "green")) + 
  ggh4x::facet_nested(~var2+var4,
                      strip = strips) +
  theme_bw()

相关问题