使用gggenomes绘图:实现序列标签的对齐与分色显示
解决方案
步骤1:拆分序列ID为两列
首先将seqs数据框中的seq_id拆分为species_name和sequence_name两列,避免原格式的空格干扰:
library(tidyr) library(gggenomes) # 拆分seq_id,保留sequence_name中的空格(若存在) seqs <- seqs %>% separate(seq_id, into = c("species_name", "sequence_name"), sep = " ", extra = "merge")
步骤2:自定义标签绘制(替代geom_bin_label)
geom_bin_label无法实现多色多列对齐需求,我们直接利用gggenomes自动生成的序列垂直位置变量.y,用两个geom_text分别绘制物种名和序列名:
p <- gggenomes(seqs = seqs, genes = genes, links = links) + geom_seq() + # 注意fill映射的列名与genes数据框一致(原数据为orthogroup小写) geom_gene(aes(fill = orthogroup), stroke = 0.5) + # 红色物种名,右对齐形成左列 geom_text(aes(x = -0.8, y = .y, label = species_name), color = "red", fontface = "italic", size = 5, hjust = 1) + # 蓝色序列名,右对齐形成右列,x坐标与物种名拉开间距 geom_text(aes(x = -0.2, y = .y, label = sequence_name), color = "blue", fontface = "italic", size = 5, hjust = 1) + geom_link(offset = 0.25) + theme(axis.text.x = element_text(size = 15)) + labs(fill = "Orthogroups") # 扩展x轴左侧范围,防止标签被截断 p <- p + xlim(-1.0, max(seqs$end) * 1.05)
关键说明
- 借助gggenomes内置的
.y变量,确保标签与对应序列垂直对齐。 - 通过
hjust = 1设置文本右对齐,让同一列的标签边缘整齐对齐。 - 调整
x参数可灵活控制两列的间距,xlim用于适配标签显示范围。
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

