如何使用grid.arrange将自定义图例插入系统发育树中心位置
解决方案
grid.arrange默认按行列排列元素,要实现图层叠加、自定义图例位置,可以结合annotation_custom指定坐标范围实现,具体操作如下:
- 先准备系统发育树的grob对象:
- 若你用ggtree绘制发育树,直接用
ggplotGrob(你的绘图对象)转成grob即可 - 若你直接读取已有图片,用
png::readPNG读取图片后转成rasterGrob
- 若你用ggtree绘制发育树,直接用
- 用你已经提取好的图例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
相关产品推荐
相关产品推荐

