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

使用ggtree按分类变量着色节点时遇调色板请求错误

问题原因分析
  • 核心错误是节点ID匹配错误:ggtree中,进化树的末端(tips)ID从1到n_tips,内部节点(internal nodes)ID从n_tips + 1开始。你的树有9个末端(spec1-spec9),因此内部节点ID是10到17,而非你使用的1-8。
  • geom_nodepoint仅针对内部节点,但你给这些节点对应的分类值全为NA,导致调色板没有可生成颜色的有效分类,触发"Must request at least one colour from a hue palette."错误。
解决方案

修正节点ID的匹配逻辑,给正确的内部节点ID分配分类变量,同时使用支持填充的形状:

# 读取进化树
tree.1 <- read.tree(text="(spec1:2.2,((spec2:1.8,(spec9:1.4,(spec3:1.3,spec5:1.3):0.1):0.4):0.2,(spec8:1.7,(spec6:1.5,(spec7:1,spec4:1):0.5):0.2):0.3):0.2);")

# 添加节点标签
tree.1$node.label <- rep(100, 8)

# 绘制基础树图
tree_plot <- ggtree(tree.1, branch.length = "none", ladderize = TRUE) + 
  geom_tiplab() + 
  geom_nodelab()

# 构建匹配内部节点ID的分类数据框
# 9个末端节点,内部节点ID范围是10-17
category_nodes_df <- data.frame(
  node = 10:17,
  category_nodes = c(rep("cat1", 4), rep("cat2", 4))
)

# 为内部节点着色,使用shape=21(支持填充的圆形)
tree_plot %<+% category_nodes_df + 
  geom_nodepoint(aes(fill = category_nodes), shape = 21, size = 5)
补充说明
  • 若需给末端节点着色,可搭配geom_tippoint,并给末端ID(1-9)分配对应分类值。
  • 将分类变量转为因子不是必须操作,但如果需要固定分类的显示顺序,可提前用as.factor()转换。

内容的提问来源于stack exchange,提问作者mareikedaubert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:51:11