You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot中根据标签字符为注释设置条件颜色

解决ggplot中stat_pvalue_manual注释条条件着色问题

你的代码失效原因是stat_pvalue_manual的colour参数直接传入向量时,不会按数据行对应映射,得通过aes()把颜色和数据框的列绑定,再配合颜色刻度让ggplot识别自定义颜色值。

方案一:基于已生成的color列映射

直接修改stat_pvalue_manual的调用方式,把colour放到aes()里,再用scale_colour_identity()告诉ggplot直接使用列中的颜色字符串:

library(ggplot2)
library(rstatix)

color_mapping <- function(label) {
  if (grepl("A", label)) {
    return("orange")  
  } else if (grepl("B", label)) {
    return("purple") 
  } else {
    return("aquamarine") 
  }
}

my_data <- data.frame(
  group1 = c("A", "B", "C"),
  group2 = c("D", "E", "G"),
  p = c(0.01, 0.05, 0.001),
  y.position = c(0.8, 0.7, 0.9),
  label = c(
    "A vs D: p=0.037  -  ns",
    "B vs E: p=5.78e-06  -  ****",
    "C vs D: p=0.005  -  *"
  )
)

my_data$color <- sapply(my_data$label, color_mapping)

my_plot <- ggplot(my_data, aes(x = group1, y = y.position)) +
  geom_bar(stat = "identity") +
  stat_pvalue_manual(data = my_data, label = "label", aes(colour = color)) +
  scale_colour_identity() # 关键:直接使用color列的颜色值

print(my_plot)

方案二:不提前生成color列,直接在映射中判断

可以省去提前生成color列的步骤,直接在aes(colour)里用case_when实现条件判断:

library(ggplot2)
library(rstatix)
library(dplyr) # 需要dplyr支持case_when

my_data <- data.frame(
  group1 = c("A", "B", "C"),
  group2 = c("D", "E", "G"),
  p = c(0.01, 0.05, 0.001),
  y.position = c(0.8, 0.7, 0.9),
  label = c(
    "A vs D: p=0.037  -  ns",
    "B vs E: p=5.78e-06  -  ****",
    "C vs D: p=0.005  -  *"
  )
)

my_plot <- ggplot(my_data, aes(x = group1, y = y.position)) +
  geom_bar(stat = "identity") +
  stat_pvalue_manual(
    data = my_data, 
    label = "label", 
    aes(colour = case_when(
      grepl("A", label) ~ "orange",
      grepl("B", label) ~ "purple",
      TRUE ~ "aquamarine"
    ))
  ) +
  scale_colour_identity()

print(my_plot)

两种方案都能实现根据label中的字符为注释条设置对应颜色,核心是通过aes()建立颜色与数据的映射关系,再用scale_colour_identity()让ggplot直接解析颜色字符串。

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:40:31