R语言 固定在geom_col顶部绘制的geom_point中变量的顺序

liwlm1x9  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(228)

我有一个包含两个分类变量和一个数值变量的数据表。
下面是生成示例数据的代码:

data <- data.frame(system = rep(c("X","Y","Z"), 10), 
                   region = rep(letters[1:5], 6), 
                   value = rnorm(60, 500, 300))

现在,我想绘制系统区域平均值,并将系统平均值与系统区域平均值叠加。
以下是构建绘图数据和第一个绘图的代码:

plot_data <- data %>%
  mutate(system = factor(system), region = factor(region)) %>%
  group_by(system, region) %>%
  summarise(avg = mean(value), .groups = "drop") %>%
  left_join(y = data %>% group_by(system) %>% summarise(avg = mean(value), .groups = "drop"), by = "system", suffix = c("", "_all")) %>%
  mutate(point_type = ifelse(avg_all > avg, "above", "in"))

ggplot(plot_data, aes(x = region, y = avg, fill = system)) +
  geom_col(position = "dodge") +
  geom_point(aes(y = avg_all), shape = 21, position = position_dodge(width = 0.9))

但是现在,如果我想给geom_point添加一种颜色美感,就像这样:

ggplot(plot_data, aes(x = region, y = avg, fill = system)) +
  geom_col(position = "dodge") +
  geom_point(aes(y = avg_all, color = point_type), shape = 21, position = position_dodge(width = 0.9))

图形不再按照与列相同的顺序排列position.dodge中的点。请注意,在区域“B”中,绿色和蓝色的点/条未对齐,在区域“d”中,红色和绿色的点/条未对齐,在区域“e”中,红色,绿色和蓝色的点/条未对齐。我不能弄清楚原因。未对齐不是系统性的,但我尝试了position = position.dodge2(reverse = T),但没有解决问题。

bf1o4zei

bf1o4zei1#

问题是添加color aes改变了用于geom_point的数据分组。要修复这个问题,你必须使用group aes,告诉ggplot2你想用system对点进行分组和闪避。

library(ggplot2)

ggplot(plot_data, aes(x = region, y = avg, fill = system)) +
  geom_col(position = "dodge") +
  geom_point(aes(y = avg_all, color = point_type, group = system),
    shape = 21, position = position_dodge(width = 0.9)
  )

pw136qt2

pw136qt22#

我说得有点晚了,使用group已经有了答案,我想说在第一个aes中使用group = system,这样它就可以在geoms之间共享了。
另一种选择(这不会给我们提供完全相同的图形,我认为这不是一个很好的解决方案)是在第一个aes中定义color,然后在geom_col中覆盖它。

ggplot(plot_data, aes(x = region, y = avg, fill = system, color = point_type)) +
  geom_col(position = "dodge", color = "white", size = 0.1) +
  geom_point(aes(y = avg_all), 
             shape = 21, position = position_dodge(width = 0.9))

相关问题