如何在R中使用ggplot设置分组绘图颜色,对照组和处理组各用统一颜色
实现方案
你想要实现的效果核心是保留单只动物的独立折线,同时按处理/对照两类分配颜色,只需要调整color的映射逻辑即可,不需要修改group参数:
- 首先在数据中新增处理分组列,标记每个样本属于对照组还是处理组:
library(tidyverse) growth_data_long <- growth_data %>% pivot_longer(-`animal`, names_to = "Day", values_to = "Growth") %>% # 以下提取规则可根据你的animal列实际命名调整,比如animal列值是Control_1/Treated_1这类格式就可以直接用 mutate(treatment = case_when( str_detect(animal, "Control") ~ "对照组(Control)", str_detect(animal, "Treated") ~ "处理组(Treated)" ))
- 绘图时将color美学映射到新增的treatment列即可:
growth_data_long %>% ggplot(aes(x = Day, y = Growth, group = animal)) + geom_line(aes(color = treatment)) + geom_point(aes(color = treatment)) + # 可选:自定义两种分组的颜色,颜色值可以替换为你想要的十六进制色值或颜色名 scale_color_manual(values = c("对照组(Control)" = "#2c3e50", "处理组(Treated)" = "#e74c3c"))
原理解释
你原本的代码将color映射到了animal,所以每个动物都会分配独立的颜色。调整后:
group = animal保留原有的折线拆分逻辑,每个动物单独画一条折线,不会出现聚合线color = treatment会让ggplot给同一个处理分组的所有动物分配相同颜色,最终只会生成两种配色
内容的提问来源于stack exchange,提问作者angel_30
相关产品推荐
相关产品推荐

