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

