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

如何在RNA-seq火山图中添加自定义差异表达分组图例?

如何为RNA-seq火山图添加自定义分组图例(R ggplot2)

嘿,我懂你的问题啦!你现在用ggplot画RNA-seq的火山图,已经给不同调控状态的基因设置了不同颜色,但就是出不来对应的自定义图例对吧?这是因为你之前的代码是直接在geom_point里指定color参数(相当于硬编码颜色),没有把颜色和数据里的分组变量绑定,所以ggplot没法自动生成图例。

下面我给你调整代码,完美实现你要的效果:

第一步:给数据集添加分组变量

首先我们先给你的df_toxins数据框新增一列,用来标记每个基因的调控状态。这里用dplyr包的case_when函数来实现,如果你还没加载包的话记得先加载:

library(ggplot2)
library(dplyr)

# 新增调控状态分组列
df_toxins <- df_toxins %>%
  mutate(regulation_status = case_when(
    logFC < -1 ~ "Down regulated",  # 下调基因
    logFC > 1 ~ "Up regulated",    # 上调基因
    TRUE ~ "No regulated"          # 无差异基因
  ))

第二步:修改绘图代码,映射颜色到分组变量

现在我们把颜色映射到刚才新增的regulation_status变量,这样ggplot就会自动生成对应的图例,同时我们可以自定义图例的颜色、标题和样式:

ggplot(df_toxins, aes(x = logFC, y = -log10(FDR))) + 
  # 把color放到aes里,绑定到分组变量
  geom_point(aes(color = regulation_status), alpha = 0.6, size = 1.5) +
  # 自定义每个分组对应的颜色,和你原来的设置一致
  scale_color_manual(values = c(
    "Down regulated" = "red",
    "Up regulated" = "blue",
    "No regulated" = "black"
  )) +
  # 保留你原来的辅助线
  geom_vline(xintercept = c(-1, 1), linetype = "dashed") + 
  geom_hline(yintercept = 0) + 
  theme_linedraw() + 
  theme(
    plot.title = element_text(hjust = 0.5, size = 22),
    # 调整图例样式:标题大小、位置等
    legend.title = element_text(size = 12),
    legend.position = "right"  # 可以改成"top"、"bottom"等你喜欢的位置
  ) + 
  ggtitle("Toxins") +
  # 修改图例的标题
  labs(color = "Regulation Status")

可选:不修改原数据集的写法

如果你不想改动原数据框,也可以直接在ggplot的aes里临时生成分组变量,代码如下:

ggplot(df_toxins, aes(x = logFC, y = -log10(FDR))) + 
  geom_point(aes(color = case_when(
    logFC < -1 ~ "Down regulated",
    logFC > 1 ~ "Up regulated",
    TRUE ~ "No regulated"
  )), alpha = 0.6, size = 1.5) +
  scale_color_manual(
    values = c("red", "blue", "black"),
    labels = c("Down regulated", "Up regulated", "No regulated")
  ) +
  geom_vline(xintercept = c(-1, 1), linetype = "dashed") + 
  geom_hline(yintercept = 0) + 
  theme_linedraw() + 
  theme(plot.title = element_text(hjust = 0.5, size = 22)) + 
  ggtitle("Toxins") +
  labs(color = "Regulation Status")

这样调整后,你的火山图就会出现包含三个分组的自定义图例啦,颜色和你原来设置的完全一致~

内容的提问来源于stack exchange,提问作者Leandro Boralli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:50:41