如何将ggtree末端标签调整为垂直方向且不丢失分组填充色
问题解决思路
你遇到的问题本质有两个:
geom="text"本身不存在fill属性,只有geom="label"支持填充色设置,切换为text后填充消失是组件本身的特性限制- 原代码仅给点的color映射配置了颜色标尺,没有给标签的fill映射设置对应配色规则,也会导致填充异常
无需把geom切换为text,保持使用geom="label",给标签添加角度映射实现垂直布局,同时补充fill的颜色标尺即可解决问题,另外注意修正原代码的语法错误:label.size = 0后缺少英文逗号。
修改后可运行代码
library(ggtree) library(ape) library(RColorBrewer) p1 <- ape::read.tree("Tert_aln.fasta_processed.fa.raxml.support") temp1 = read.csv("Tert_Final_Mapping_File.csv", sep=";") mycolors = c(brewer.pal(name="Set1", n = 9), brewer.pal(name="Paired", n = 12), brewer.pal(name="Dark2", n = 8)) p2 <- ggtree(p1, layout='circular') %<+% temp1 + geom_tippoint( mapping = aes(color = phylum), size = 2, show.legend = FALSE) + # 同时配置color和fill的颜色标尺,保证分组颜色一致 scale_color_manual(values = mycolors) + scale_fill_manual(values = mycolors, name = "Phylum") + geom_tiplab( # 增加angle映射实现垂直布局,同时处理下半圈标签倒转问题 aes(fill = phylum, angle = angle + ifelse(angle > 180, 180, 0)), color = 'black', offset = 3, # 垂直标签占位更大,适当调整偏移量避免和点重叠 size = 3, geom = "label", align = TRUE, face = "bold", label.size = 0, label.padding = unit(0.15, "lines"), linetype = "solid") + ggtitle("Phylogenetic tree of Tert") + theme( axis.title.x = element_blank(), axis.title.y = element_blank(), legend.title = element_text( face = "bold", size = 12), legend.text=element_text( face = "bold", size = 10), plot.title = element_text( size = 12, face = "bold"), legend.position = "bottom", legend.box = "vertical", legend.margin = margin()) pdf("ggplot_Tert1.pdf", width = 20, height = 22) p2 dev.off()
如果需要调整标签倾斜角度,修改angle映射的计算逻辑即可,比如要标签完全垂直于径向,调整为angle = angle + 90 + ifelse(angle > 180, 180, 0)即可。
内容的提问来源于stack exchange,提问作者Bryan Etindi Abuchery
相关产品推荐
相关产品推荐

