如何用ggrepel整理火山图差异基因标签?实现蓝标靠左红标靠右
解决火山图标签混乱的方案
要实现下调基因标签固定在左侧、上调基因标签固定在右侧,核心是按差异分组分别设置标签偏移参数,而非使用统一的偏移值。以下是具体修改方案:
关键修改思路
- 将上调、下调基因的标签绘制分开处理,分别给两组设置向左/向右的定向偏移
- 过滤掉无差异基因的标签,避免干扰整体布局
修改后的完整代码
resLFC <- read.delim("resLFC f2 vs f1 chronic.txt") ggplot(data= resLFC, aes(x= log2FoldChange, y= -log10(padj), col=diffs))+ coord_cartesian(xlim = c(-20,20), ylim= c(0,80))+ geom_vline(xintercept = c(-1, 1), col="blue", linetype="dashed")+ geom_hline(yintercept = 4, col= "red", linetype="dashed") + geom_point()+ scale_color_manual(values = c("dodgerblue1", "gray", "deeppink1"), labels = c("Downregulated", "Not significant", "Upregulated"))+ labs(color = "x", x= expression("log"[2]*"FC"), y= expression("-log"[10]*"p-value"))+ # 处理下调基因标签:向左偏移 geom_label_repel(data = subset(resLFC, diffs == "Downregulated"), aes(label = delabel), nudge_x = -6, # 偏移量可根据x轴范围调整,比如-8/-10 nudge_y = 0, force = 12, max.iter = 20000, max.segment.length = 0.01, max.overlaps = 1000, color = "dodgerblue1") + # 处理上调基因标签:向右偏移 geom_label_repel(data = subset(resLFC, diffs == "Upregulated"), aes(label = delabel), nudge_x = 6, # 偏移量可根据x轴范围调整,比如8/10 nudge_y = 0, force = 12, max.iter = 20000, max.segment.length = 0.01, max.overlaps = 1000, color = "deeppink1") + theme(legend.position = c(0.88, 0.88))
额外优化建议
- 若标签仍拥挤:
- 增大
nudge_x的绝对值,让标签离数据点更远 - 缩小标签字体,添加
size = 2.5参数 - 只标记显著性最高的基因,比如
subset(resLFC, diffs == "Downregulated" & padj < 1e-15)
- 增大
- 若连接线段过长,可调整
max.segment.length为更大的值(比如0.5),让线段布局更灵活
内容的提问来源于stack exchange,提问作者Debutant
相关产品推荐
相关产品推荐

