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
相关产品推荐
相关产品推荐

