火山图,其实就是散点图
1.导入测试数据
demo <- read.csv("output.csv")
示例数据:limma差异分析后得到的结果
2.数据预处理
处理为可视化的输入数据
三列:logFC、FDR、分组标签(Up Down No)
df <- data.frame(logFC = demo$logFC, # logFC
FDR = demo$adj.P.Val) # FDR
# Grouping tags
df$significant <- ifelse(df$logFC >= 1 & df$FDR < 0.05, "Up",
ifelse(df$logFC <= (-1) & df$FDR < 0.05, "Down", "No"))
3.1可视化 plot()
# Set group color:Up-red,Down-blue,No-grey
color <- df$significant
color <- ifelse(color == "Up", "red",
ifelse(color == "Down", "blue", "grey"))
par(mar=c(5, 4, 4, 5) , xpd=F) # Default mar=c(5, 4, 4, 8)
plot(df$logFC, -log10(df$FDR), col = color, pch = 20,
main = "Volcano Plot", xlab = "Log2(Fold Change)", ylab = "-Log10(FDR)")
legend("right", inset = -0.2, legend = c("Up", "Down"), col = c("red", "blue"),
pch = 16, xpd = T, box.col = "white")
abline(h = -log10(0.05), col = "black", lwd = 1, lty = 2)
abline(v = c(-1,1), col = "black", lwd = 1, lty = 2)
3.2可视化 ggplot2()
library(ggplot2)
ggplot(df,aes(x = logFC, y = -log10(FDR)))+
geom_point(aes(color = significant))+
scale_color_manual(values = c("blue","grey","red"))+
labs(title = "Volcano Plot", x = "Log2(Fold Change)",y = "-log10(FDR)")+
theme(plot.title = element_text(hjust = 0.5))+
geom_hline(yintercept = -log10(0.05), linetype = 2)+
geom_vline(xintercept = c(-1,1), linetype = 2)