1. 前言
最近看到了论文中都把多组的差异分析火山图分为多个图展示,虽然没什么问题,但是感觉追求顶刊这样的话有些Low,所以来绘制一个多组的差异基因火山图。
2.输入文件
| SYMBOL | log2FoldChange | change | group |
|---|---|---|---|
| SERPINE1 | -1.102974389 | Down | 12h_vs_0h |
| HSPA1A | 0.87030297 | Up | 12h_vs_0h |
| HSPA1B | 0.883833938 | Up | 12h_vs_0h |
| SOD2 | -0.606522079 | Down | 12h_vs_0h |
3. 绘图
rm(list = ls())
####—-load R Package—-####
library(tidyverse)
library(ggrepel)
library(ggfun)
####—-load Data—-####
all_deg <- read.csv(file = “优化后的输入文件/test.csv”)
# ================================================
# 新增:定义需要高亮的基因列表(替换为实际基因名称)
gene_list <- c(“HSPA1B”)
# ================================================
####—-plot—-####
p <- ggplot(data = all_deg) +
# 正常基因(灰色背景)
geom_jitter(data = all_deg %>%
dplyr::filter(change == “Normal”),
aes(x = group, y = log2FoldChange,
color = change, size = abs(log2FoldChange),
alpha = abs(log2FoldChange)),
width = 0.4) +
# 差异基因(上/下调)
geom_jitter(data = all_deg %>%
dplyr::filter(change != “Normal”),
aes(x = group, y = log2FoldChange,
color = change, size = abs(log2FoldChange),
alpha = abs(log2FoldChange)),
width = 0.4) +
# ================================================
# 修改:根据基因列表高亮指定基因(原筛选前15名的部分)
geom_jitter(
data = all_deg %>% dplyr::filter(SYMBOL %in% gene_list), # 筛选基因列表
aes(x = group, y = log2FoldChange, size = abs(log2FoldChange)),
width = 0.4,
shape = 21,
fill = “#dd1c77” # 高亮颜色
) +
geom_text_repel(
data = all_deg %>% dplyr::filter(SYMBOL %in% gene_list), # 筛选基因列表
aes(x = group, y = log2FoldChange, label = SYMBOL)
) +
# ================================================
# 以下代码保持原样
geom_tile(aes(x = group, y = 0, fill = group), height = 0.4) +
geom_text(data = all_deg %>%
dplyr::select(group) %>%
dplyr::distinct(group, .keep_all = T),
aes(x = group, y = 0, label = group),
size = 6) +
geom_hline(yintercept = c(-log2(1.5), log2(1.5))) +
scale_y_continuous(limits = c(-5, 5)) +
scale_size(range = c(1,15)) +
scale_alpha(range = c(0.1, 1)) +
scale_color_manual(values = c(“Up” = “#f46d43”,
“Normal” = “#bdbdbd”,
“Down” = “#3288bd”)) +
scale_fill_manual(values = c(‘#8dd3c7′,’#ffffb3′,’#bebada’,’#fb8072′,’#80b1d3′)) +
theme_bw() +
theme(
axis.text = element_text(color = “#000000”, size = 12),
axis.title = element_text(color = “#000000”, size = 15),
panel.grid = element_blank(),
legend.background = element_roundrect(color = “#969696”)
)
# 保存图片
ggsave(filename = “test.pdf”,
plot = p,
height = 12,
width = 12)
####—-sessionInfo—-####
sessionInfo()
# 保存数据(可选)
write.csv(x = all_deg, file = “test.csv”, row.names = FALSE)
# 设置工作路径(根据实际路径修改)
setwd(“F:/模仿中可视化/…”)
4. 结果