查看原文
其他

用图片注释进化树

Y叔叔 YuLabSMU 2022-09-20

好玩的ggimage:ggplot2中愉快地使用图片,让你玩转emoji、pokemon和各种图片,可以轻松画出饼图版气泡图,用Pokémon神兽拼出我的名字和我的姓氏,让做图不正经起来万里挑一,像圣诞节加帽子,简直太容易不过。

做学术能够拿来娱乐和不正经的东西实在不多,而做图是为数不多的一个,正经的图大多有现成的工具可以做,而且千篇一律,特别没意思。只有不正经的图,才有一点创作的空间,也是极好的训练,不正经久了,正经起来连自己都要爱上自己。

ggimage的应用非常广阔,而且也极具有娱乐性,我做这个包,是源自于ggtree里用图片注释进化树,我希望切分出来,一方面给ggtree瘦身,让安装依赖关系简单点,容易安装些。之前就因为在linux上要编译处理图片的包,有些人安装不上,以后不会有这个问题了。第二是我要追求大一统的图形语法,觉得之前的实现不优美。第三它应该拥有更广阔的应用空间,而不仅限于ggtree。

现在ggtree + ggimage的实现方式,我简直要被自己感动哭,它被整合于geom_tiplab和geom_nodelab中,现在geom_tiplab可以打文本、可以解析emoji、可以加图片,大一统的语法,且不需要引入新函数/图层。

Annotate tips

library(ggimage) library(ggtree) url <- paste0("https://raw.githubusercontent.com/TreeViz/",            "metastyle/master/design/viz_targets_exercise/") x <- read.tree(paste0(url, "tree_boots.nwk")) info <- read.csv(paste0(url, "tip_data.csv")) p <- ggtree(x) %<+% info + xlim(NA, 6) p + geom_tiplab(aes(image= imageURL), geom="image", offset=2, align=T, size=.16, hjust=0) +    geom_tiplab(geom="label", offset=1, hjust=.5)

Annotate internal nodes

## example from https://rgriff23.github.io/2017/05/11/primate-phylogeny-ggtree.html library(ape) tree <- read.nexus("https://raw.githubusercontent.com/rgriff23/Dissertation/master/Chapter_2/data/tree.nex") phylopic_info <- data.frame(node = c(124, 113, 110, 96, 89, 70),                            phylopic = c("7fb9bea8-e758-4986-afb2-95a2c3bf983d",                                        "bac25f49-97a4-4aec-beb6-f542158ebd23",                                        "f598fb39-facf-43ea-a576-1861304b2fe4",                                        "aceb287d-84cf-46f1-868c-4797c4ac54a8",                                        "0174801d-15a6-4668-bfe0-4c421fbe51e8",                                        "72f2f854-f3cd-4666-887c-35d5c256ab0f"),                            species = c("galagoids", "lemurs", "tarsiers",                                        "cebids", "hominoids", "cercopithecoids")) pg <- ggtree(tree) pg %<+% phylopic_info + geom_nodelab(aes(image=phylopic), geom="phylopic", alpha=.5, color='steelblue')


d <- data.frame(node = c("70","89","96","110","113","124"),                images = c("https://i.imgur.com/8VA9cYw.png",                            "https://i.imgur.com/XYM1T2x.png",                            "https://i.imgur.com/EQs5ZZe.png",                            "https://i.imgur.com/2xin0UK.png",                            "https://i.imgur.com/hbftayl.png",                            "https://i.imgur.com/3wDHW8n.png")) pg %<+% d + geom_nodelab(aes(image=images), geom="image")

Use image as background

pg + geom_phylopic(image="79ad5f09-cf21-4c89-8e7d-0c82a00ce728", size=Inf, alpha=.5, color='firebrick')

最后推荐一下这篇文章的姊妹篇《Y叔不想养蛙,只想养你!》。


往期精彩

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

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