查看原文
其他

@所有人:用图片来画图,还带美图效果哦!

Y叔叔 YuLabSMU 2022-09-20

Hello again Guangchuang,


I just figured how to solve it, but using inherit.aes=F in the geom_nodelab.


I do have another question though. My images have empty/transparent space. When I plot them over the tree, those become white and we can no longer see the branch behind. Is there a way to use geom_nodelab and keep the transparency of the images?


Thank you!

ggimage图上画图很爽,而这个反哺了ggplot2ggtree,上面这个就是ggtree用户的提问,图片有背景,那么画在图上就会档住背面的线或点。这个其实早就支持了,因为ggimage可以在画图的同时对图片进行处理,你只需要传入处理的函数给image_fun参数就行。而这些可以处理的函数嘛,去magick包找一下,大把现成的,而且你能够组合它们来完成一些任务。

library(ggplot2)
library(ggtree)

img = "https://raw.githubusercontent.com/YuLab-SMU/treedata-book/master/img/frogs/frog.jpg"
set.seed(1982)
x <- rtree(5)
p <- ggtree(x) + theme_grey()
p1 <- p + geom_nodelab(image=img, geom="image", size=.12) + 
          ggtitle("original image")
p2 <- p + geom_nodelab(image=img, geom="image", size=.12,
            image_fun= function(.) magick::image_transparent(., "white")) + 
            ggtitle("image with background removed")
cowplot::plot_grid(p1, p2, ncol=2)


这里我故意设成灰背景,便于我们看到白色的背景,去除前和去除后,做一对比。



本文也是我在《看代码学画图 - Nobel化学奖的获得者多半投胎在那些国家?》一文中我说的另外的参数,一般人不知道。同时也回答了SO上的提问:


往期精彩

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存