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

R语言ggscatter分面绘图如何按相关系数R和P值自定义点配色

解决方案

ggscatter本身不支持直接将分面组内的相关性检验结果映射到点的颜色属性,所以需要提前按分面分组(即conc字段)计算每组的相关系数R和显著性P值,再合并回原数据集后做颜色映射即可,具体实现如下:

第一步:加载依赖包&预处理数据

# 加载所需工具包
library(ggpubr)
library(dplyr)

# 导入示例数据
data <- read.table(text = "
conc   exposure   col
11.16  21294      0.139275104
11.16  18018      0.150012216
13.8   26208      0.067379679
18.1   29484      0.013190731  
", header = T)

# 按conc分组计算每组的相关系数和显著性P值
cor_res <- data %>%
  group_by(conc) %>%
  summarise(
    r = cor.test(exposure, col)$estimate,
    p = cor.test(exposure, col)$p.value
  )

# 将相关性结果合并回原始数据集
data <- data %>% left_join(cor_res, by = "conc")

# 生成颜色映射变量:P值不显著的标记为NA,后续统一映射为灰色
data$color_val <- ifelse(data$p < 0.05, data$r, NA)

第二步:调整绘图代码实现目标配色

ggscatter(data, 
          x = "exposure", 
          y = "col", 
          add = "reg.line", 
          conf.int = TRUE, 
          color = "color_val", # 映射自定义的颜色变量
          cor.coef = TRUE) +
  facet_wrap(~conc)+
  ylab("OD")+
  xlab("Exposure") +
  # 配置颜色规则:显著组按R值映射连续色阶,不显著组统一为灰色
  scale_color_gradientn(
    colors = c("blue", "white", "red"), # 可自定义连续色阶组合
    na.value = "gray80", # 不显著点的灰色可按需调整深浅
    name = "相关系数R"
  )

补充说明

  • 显著性判定阈值可自行调整,修改ifelse(data$p < 0.05)中的阈值即可
  • 连续色阶可以替换为其他配色方案,比如scale_color_viridis_c()等官方连续配色函数
  • 原有分面显示相关性系数的功能不受影响,可正常展示每个分面的R、P值

内容的提问来源于stack exchange,提问作者Monique Schreiner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:48:01