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

如何修改ggtree进化树绘图的图例符号形状?

问题:修改ggtree进化树的图例符号形状

背景与现有代码

我正在使用ggtree绘制进化树,所用数据可从figshare获取,也可直接从ggtree中获取phylo树。

加载所需包

# 加载依赖包
pacman::p_load(
          here,
                    dplyr,
                    googlesheets4, 
                    tidyverse, 
                    rotl, 
                    dplyr, 
                    ape, 
                    ggplot2, 
                    ggnewscale, 
                    ggtree, 
                    ggtreeExtra,
                    taxize,
                    rentrez
)

导入数据

data_for_tree_plot <- read.csv(here("data", "data_for_tree_plot.csv")) # 数据可从figshare获取
nwk <- system.file("extdata", "sample.nwk", package="treeio")
mytree <- groupClade(read.tree(nwk), c(17, 21))

构建进化树

p <- ggtree(mytree, layout = "circular", lwd = 0.75, aes(colour=species_class))
p <- p %<+% data_for_tree_plot + # 将树与数据关联
  scale_colour_manual(values = c("#EE3377", "#332288", "#EECC66", "#6699CC", "#EE7733", "#882255"), # 类群颜色
      name="Class", 
      breaks=c( "Arachnida", "Insecta", "Actinopterygii", "Mammalia", "Reptilia", "Aves"))
p # 生成圆形进化树

上述代码生成的圆形进化树,图例默认是线条样式。我希望将图例符号修改为带填充的方形样式(不同类群对应各自的填充色),但尝试修改legend.key填充色会统一改变所有填充,使用guide_legend(override.aes)也没有效果。

请问如何修改ggtree对象的图例符号形状?


解决方法

ggtree默认将图例渲染为线条(匹配树分支的线条元素),要改成带填充的形状,需在scale_colour_manual中通过guide参数,用override.aes同时指定形状、填充色和尺寸,且要选择支持填充的形状类型(如实心方形shape=15、可自定义边框的方形shape=21)。

修改后的代码(实心方形图例)

p <- ggtree(mytree, layout = "circular", lwd = 0.75, aes(colour=species_class))
p <- p %<+% data_for_tree_plot + 
  scale_colour_manual(
    values = c("#EE3377", "#332288", "#EECC66", "#6699CC", "#EE7733", "#882255"),
    name="Class", 
    breaks=c( "Arachnida", "Insecta", "Actinopterygii", "Mammalia", "Reptilia", "Aves"),
    guide = guide_legend(
      override.aes = list(
        shape = 15,  # 实心方形符号
        size = 5,    # 调整符号大小
        fill = c("#EE3377", "#332288", "#EECC66", "#6699CC", "#EE7733", "#882255") # 填充色与类群颜色对应
      )
    )
  )
p

带边框的填充方形图例(可选)

如果需要带黑色边框的填充方形,可将形状改为21并额外设置边框参数:

guide = guide_legend(
  override.aes = list(
    shape = 21,
    size = 5,
    fill = c("#EE3377", "#332288", "#EECC66", "#6699CC", "#EE7733", "#882255"),
    colour = "black", # 边框颜色
    lwd = 1           # 边框粗细
  )
)

之前override.aes无效的原因是未单独指定fill参数——ggtree的颜色映射默认仅绑定colour,填充效果需要手动匹配对应颜色才能生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:14:50