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

如何使用grid.arrange将自定义图例插入系统发育树中心位置

解决方案

grid.arrange默认按行列排列元素,要实现图层叠加、自定义图例位置,可以结合annotation_custom指定坐标范围实现,具体操作如下:

  1. 先准备系统发育树的grob对象:
    • 若你用ggtree绘制发育树,直接用ggplotGrob(你的绘图对象)转成grob即可
    • 若你直接读取已有图片,用png::readPNG读取图片后转成rasterGrob
  2. 用你已经提取好的图例grob对象legend,配合grid.arrange叠加即可
    完整示例代码:
# 提前加载依赖包
library(ggplot2)
library(dplyr)
library(ggpubr)
library(gridExtra)
library(grid)
library(png)

# ---------- 以下为你已完成的图例生成代码 ----------
df <- data.frame(name = c("ANA-GRADE", "ASTERIDS","BASAL EUDICOTS", "BASAL SUPERASTERIDS",
                          "CHOLORANTHALES", "MAGNOLIIDS", "MONOCOTS","ROSIDS",
                          "ANA-GRADE", "ASTERIDS","BASAL EUDICOTS", "BASAL SUPERASTERIDS",
                          "CHOLORANTHALES", "MAGNOLIIDS", "MONOCOTS","ROSIDS"),
                 colour = c("#EFF13A", "#428d34", "#84cf70", "#62a852", "#CDD100", 
                            "#8B5742", "#EEAD0E", "#2d7a21", "#EFF13A", "#428d34", 
                            "#84cf70", "#62a852", "#CDD100", "#8B5742", "#EEAD0E", "#2d7a21"),
                 x1 = runif(16, 5,100),
                 y1 = runif(16, 20,50))

fake <- df %>% ggplot(aes(x1,y1, colour = name)) +
  geom_line(size = 1) +
  scale_colour_manual(values = c("#EFF13A", "#428d34", "#84cf70", "#62a852", "#CDD100", 
                       "#8B5742", "#EEAD0E", "#2d7a21"),
                      name = "Major clade") +
  theme_bw() +
  theme(legend.title = element_text(face = "bold",size = 12))

legend <- get_legend(fake)
# ---------- 以上为你已完成的图例生成代码 ----------

# 读取系统发育树转grob(如果是ggtree绘图,替换为 tree_grob <- ggplotGrob(你的ggtree对象))
tree_img <- readPNG("你的系统发育树本地路径.png") 
tree_grob <- rasterGrob(tree_img, width = unit(1, "npc"), height = unit(1, "npc"))

# 叠加图层,自定义图例位置
grid.arrange(
  tree_grob,
  annotation_custom(
    grob = legend,
    xmin = 0.4, xmax = 0.6, # 水平位置:0为最左,1为最右,此处中心为0.5即水平居中
    ymin = 0.4, ymax = 0.6  # 垂直位置:0为最下,1为最上,此处中心为0.5即垂直居中
  )
)

参数调整说明:

  • 调整xmin/xmax可修改图例的水平位置和宽度,数值范围为0~1
  • 调整ymin/ymax可修改图例的垂直位置和高度,数值范围为0~1
  • 若要让图例完全居中,只要保证(xmin+xmax)/2=0.5、(ymin+ymax)/2=0.5即可,数值差越大,图例尺寸越大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:07