如何修改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
相关产品推荐
相关产品推荐

