火山图绘制

一些作图笔记,防止自己忘记,以下得到的图结果是添加辅助线条,标记基因

args <- commandArgs(trailingOnly = TRUE)
diffdir <- args[1]
outdir <- args[2]
library(ggplot2)
library(ggrepel)
theme_set(theme_bw())
qvalue_limit = as.numeric(0.05)
## 示例路径
#1.diffpath:差异比较组,组别之间通过VS连接,比如A-vs-B
#2.outdir:Volcano_path/火山图的输出路径
diffpath <- diffdir
filepath <- list.files(path = diffpath, pattern = "-vs-", full.names = TRUE)

for (i in filepath) {
  infile <- paste0(i, "/DiffExpr.SYMBOL.csv")
  vsname <- basename(i)
  data <- read.csv(file=infile, header=T, sep=",", check.names=F)
  names(data)[1] <- "SYMBOL"
  data$stat <- factor(data$stat, levels=c("down-regulated", "up-regulated", "non-significant"))
  ## get up_10 ordered by Pvalue
  up <- data[which(data$stat == "up-regulated"),1][1:10]
  up_10genes <- data[which(data$SYMBOL %in% up), ]
  ## get down_10 ordered by Pvalue
  down <- data[which(data$stat == "down-regulated"),1][1:10]
  down_10genes <- data[which(data$SYMBOL %in% down), ]
  ## get deg numubers
  deg <- data[which(data$stat != "non-significant"), 1]
  down_num <- length(which(data$stat=="down-regulated"))
  up_num <- length(which(data$stat=="up-regulated"))
  deg_num <- down_num + up_num
  down_lab <- paste("down-regulated (",down_num,")", sep="")
  up_lab <- paste("up-regulated (",up_num,")", sep="")
  label <- paste0(vsname,"\nTotal Genes: ", deg_num,  sep="")
  p <- ggplot(data, aes(x=logFC, y=-log10(PValue)))
  p <- p + geom_point(aes(colour=stat)) + labs(title = label)
  p <- p+scale_colour_manual(values=c("blue","#FF4040","grey"),
                             breaks=c("down-regulated","up-regulated","non-significant"),
                             labels=c(down_lab,up_lab,"Not significant"))
  p <- p + labs(x="log2(Fold Change)", y="-log10(PValue)")
  p <- p + theme(plot.title=element_text(size=15, margin=margin(b=10), hjust=0.5, face="bold"))
  p <- p + theme(axis.title.x=element_text(size=12, face="bold"))
  p <- p + theme(axis.title.y=element_text(size=12, face="bold"))
  p <- p + theme(legend.title=element_text(size=8, face="bold"))
  p <- p + theme(legend.text=element_text(size=6))
  p<-p+geom_hline(yintercept=-log10(qvalue_limit),linetype="dotdash",size=0.4)
  p<-p+geom_vline(xintercept=1, linetype = 'dotdash', size = 0.4, alpha = 0.5)
  p<-p+geom_vline(xintercept=-1, linetype = 'dotdash', size = 0.4, alpha = 0.5)
  p<-p+scale_x_continuous(limits = c(-max(abs(data$logFC))-0.1, max(abs(data$logFC))+0.1))
  p<-p+theme(legend.position=c(0.8,0.9), legend.key = element_rect(fill = NULL), legend.background = element_blank(),legend.text = element_text(size=10))
  p<-p+theme_test()+theme(plot.margin = margin(0.5,0.5,0.5,0.5, unit = "cm"))
  p<-p+theme(plot.title=element_text(size=12,hjust=0.5),plot.subtitle=element_text(size=10,hjust=0.5))
#标记上调基因
  p <- p + geom_text_repel(data = up_10genes,label = up_10genes$SYMBOL ,aes(x=logFC, y=-log10(PValue)),size = 3.0, color = 'black',
                           show.legend = FALSE,max.overlaps = Inf,nudge_x = 0.7,  min.segment.length = 0.5)
标记下调基因
  p <- p + geom_text_repel(data = down_10genes,label = down_10genes$SYMBOL ,aes(x=logFC, y=-log10(PValue)),size = 3.0, color = 'black',
                           show.legend = FALSE,max.overlaps = Inf,nudge_x = -0.7, min.segment.length = 0.5)
  filepng <- paste0(outdir, vsname, ".volcano.png")
  filepdf <- paste0(outdir, vsname, ".volcano.pdf")
  ggsave(filename=filepng, units="px", width=2220, height=1800, dpi=300)
  ggsave(filename=filepdf,  width=10, height=7, device="pdf")
}

以上是在多组情况下进行循环作图,如果只有一个比较组,可以不用循环,结果图如下,如果继续绘制其他形式 的图,会及时补充

### 火山绘制与命名的技术解析 火山是一种广泛应用于生物信息学领域中的数据可视化工具,主要用于展示基因或其他分子水平上的差异表达情况。其核心在于将统计显著性和效应大小结合起来进行直观表示。 #### 1. **火山的核心概念** 火山通常由两个维度构成:横轴代表效应大小(通常是log2倍变化),纵轴则表示统计显著性(通常是-log10 p-value)。这种设计使得研究者能够快速识别那些既具有较大生物学影响又具备高统计置信度的数据点[^4]。 #### 2. **火山的命名原则** 在技术文档或学术论文中,火山的名称往往与其用途密切相关。以下是常见的命名方式及其含义: - **基础命名**:可以直接称为“Volcano Plot”,这是最普遍的形式。 - **功能导向型命名**:如果表用于显示特定类型的基因表达差异,则可以加入描述性的前缀,例如“Differential Expression Volcano Plot”。 - **样本特异性命名**:当对比不同条件下的样品时,可以在标题中标明比较对象,比如“Control vs Treatment Volcano Plot”。 #### 3. **绘制火山的方法** 利用R语言中的`ggplot2`包是一个非常流行的选择来创建高质量的火山。下面提供了一个简单的代码框架: ```r library(ggplot2) # 加载数据 data <- read.table("V_GV_GV.anno.xls_ggplot2", header = TRUE) # 创建基本形 volcano_plot <- ggplot(data, aes(x=logFC, y=-log10(PValue))) + geom_point(aes(color=sign(logFC)), size=1) + # 使用颜色区分上调/下调基因 scale_color_manual(values=c("blue", "red")) + # 自定义颜色方案 theme_minimal() + # 设置简约主题 labs(title="Volcano Plot of Differential Gene Expression", x="Log2 Fold Change", y="-Log10 P Value") print(volcano_plot) ``` 上述脚本实现了从原始文件读取数据到最终渲染像的过程,并通过调整参数增强了可读性和美观程度。 #### 4. **与其他可视化的关联** 除了火山之外,还有多种其他形式可用于探索复杂关系网络或者评估路径重要性。例如,桑基擅长描绘流量转移过程;Cytoscape和Gephi适合构建复杂的节点连接模型;而基于Z分数计算的结果可能需要额外注意解读难度较高的情形下所传达的具体意义[^2][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值