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

如何为ggplot绘制的相关性矩阵文本标签添加通路对应颜色

给相关性热图的显著文本标签按基因通路着色

核心方案

放弃patchwork加背景的思路,直接在ggplot的文本图层里绑定通路颜色映射,精准控制文本颜色,效果更自然。

具体操作步骤

1. 关联通路颜色到相关性数据

假设你的相关性数据框(比如cor_data)包含gene1、gene2、correlation、p_value列,通路颜色数据框(比如pathway_colors)包含gene、pathway、color列。先把两者关联,给每个基因对匹配对应通路的颜色:

cor_data <- cor_data %>%
  # 关联第一个基因的通路颜色
  left_join(pathway_colors, by = c("gene1" = "gene")) %>%
  rename(gene1_pathway = pathway, text_color = color)

如果需要根据两个基因的通路自定义颜色(比如同通路用通路色,不同用灰色),可以加判断逻辑:

cor_data <- cor_data %>%
  left_join(pathway_colors, by = c("gene1" = "gene")) %>%
  left_join(pathway_colors, by = c("gene2" = "gene"), suffix = c("_1", "_2")) %>%
  mutate(text_color = ifelse(pathway_1 == pathway_2, color_1, "gray50"))

2. 修改ggplot文本图层

在原热图代码的geom_text中,将colour参数绑定到生成的text_color列,再用scale_colour_identity()让ggplot直接使用定义好的颜色值:

# 基于原热图代码修改文本图层
ggplot(cor_data, aes(x = gene1, y = gene2, fill = correlation)) +
  geom_tile(color = "white") +
  # 保留你原有的填充色设置
  scale_fill_gradient2(low = "navy", mid = "white", high = "firebrick", midpoint = 0) +
  # 仅给显著相关的文本加标签并着色
  geom_text(aes(
    label = ifelse(p_value < 0.05, round(correlation, 2), ""),
    colour = text_color
  ), size = 4) +
  scale_colour_identity() # 关键:直接读取text_color列的颜色值
  # 保留你原有的主题设置
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

3. 特殊情况处理

如果你的通路颜色是通过命名向量映射(比如通路名对应颜色),不用直接存颜色值,改用scale_colour_manual:

# 假设通路颜色向量:pathway_color_vec <- c("Metabolism"="#E64B35", "Signaling"="#4DBBD5")
ggplot(...) +
  geom_text(aes(colour = gene1_pathway), ...) +
  scale_colour_manual(values = pathway_color_vec)

完整示例代码

# 模拟相关性矩阵数据
cor_matrix <- cor(matrix(rnorm(30), nrow=5))
rownames(cor_matrix) <- colnames(cor_matrix) <- paste0("Gene", 1:5)
cor_data <- reshape2::melt(cor_matrix, varnames = c("gene1", "gene2"), value.name = "correlation")
# 模拟显著性p值
cor_data$p_value <- runif(nrow(cor_data), 0, 0.1)
# 基因通路颜色定义
pathway_colors <- data.frame(
  gene = paste0("Gene", 1:5),
  pathway = c("Metabolism", "Signaling", "Metabolism", "Signaling", "Immune"),
  color = c("#E64B35", "#4DBBD5", "#E64B35", "#4DBBD5", "#00A087")
)

# 关联通路颜色到相关性数据
cor_data <- cor_data %>%
  left_join(pathway_colors, by = c("gene1" = "gene")) %>%
  mutate(text_color = color)

# 绘制带通路颜色文本的热图
ggplot(cor_data, aes(x = gene1, y = gene2, fill = correlation)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "navy", mid = "white", high = "firebrick", midpoint = 0) +
  geom_text(aes(
    label = ifelse(p_value < 0.05, round(correlation, 2), ""),
    colour = text_color
  ), size = 3.5) +
  scale_colour_identity() +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

内容的提问来源于stack exchange,提问作者n rank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:03:17