You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ggtree末端标签调整为垂直方向且不丢失分组填充色

问题解决思路

你遇到的问题本质有两个:

  1. geom="text"本身不存在fill属性,只有geom="label"支持填充色设置,切换为text后填充消失是组件本身的特性限制
  2. 原代码仅给点的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:15:04