library(ggplot2)
library(ggrepel)
<- readr::read_csv(file = '_.csv')
res_sig res_sig
火山图
火山图是展示全部基因的p值和fold change最为直观的方式。
绘制火山图需要输入一个数据框,行为基因,列包括基因名、log2FoldChange、p值。
火山图(无标签)
可以先绘制一个不含标签的火山图(指不知道某点代表的基因):
## draw volcano plot ----
<- res_sig |> ggplot(aes(
volcano_plot x = log2FoldChange,
y = -log10(pvalue),
color = signif
+
)) geom_point(size = 1.5) +
scale_color_manual(values = c('steelblue', 'gray', 'brown')) +
xlim(c(-8, 8)) + # 调整x轴的取值范围
geom_vline(
xintercept = c(-1, 1),
lty = 'dashed',
col = "black",
lwd = 0.8
+
) geom_hline(
yintercept = -log10(0.05),
lty = 'dashed',
col = "black",
lwd = 0.8
+
) labs(x = "log2FoldChange", y = "-log10Pvalue") +
ggtitle("RNA seq volcano plot") +
theme(
plot.title = element_text(hjust = 0.5),
legend.position = "right",
legend.title = element_blank()
+
) ::theme_prism(border = T)
ggprism
volcano_plot
# save volcano plot
if(F) {
ggsave(
volcano_plot,'./volcano.pdf',
width = 2000,
height = 1250,
units = 'px',
dpi = 300
) }
火山图(有标签)
再绘制一个含标签的火山图用于参照,在排版软件中手动添加文本框。
gene_label
是一个存储标签信息的数据框,包含标签显示的文字(此处为gene
列)、标签的坐标位置(此处为log2FoldChange
列和pvalue
列)。
因此gene_label
可以是一个单独的数据框,也可以在原数据框(res_sig
)单独加一label列,该列中将需要添加标签的单元格填入基因名,其余留空。
此处选择制作一个单独的数据框。
<- res_sig |>
gene_label ::filter(signif != 'ns') |>
dplyr::mutate(distance = log2FoldChange^2 + log10(pvalue)^2) |>
dplyr::group_by(signif) |>
dplyrslice_max(distance, n = 10) |>
ungroup()
<- volcano_plot +
volcano_plot_label geom_label_repel(
data = gene_label,
aes(label = gene),
size = 4,
color = 'blue',
box.padding = unit(0.5, "lines"),
point.padding = unit(0.8, "lines"),
segment.color = "black",
show.legend = FALSE,
max.overlaps = 10000
) volcano_plot_label
渐变火山图
点的颜色和大小的渐变
<- volcano_plot +
volcano_plot_gradient scale_color_gradientn(
values = seq(0, 1, 0.2),
colors = c("#39489f", "#39bbec", "#f9ed36", "#f38466", "#b81f25")
+ #指定颜色渐变模式
) scale_size_continuous(range = c(2, 3)) + #指定散点大小渐变模式