ggtree画树是不带root edge的,之前在《中空的环形树》一文中,有用户想要加长长的root edge,这样变成环形树的时候,就可以用这个root edge把树给顶出去,这个我给出的解决方案是留白,大家可以回过去看那篇文章。

然而root edge在某些时候还是需要的,我其实也一直有要写的想法,不过因为不是特别需要的东西,一直也就放着,刚好最近有用户在feature request,想要画root edge,于是我就实现了geom_rootedge图层,当你加这个图层的时候,root edge就自动画上去了。

Continue reading

ggplot2字体溢出的那点破事》这是经典老问题了,现在新版本的ggplot2有新的解决方案了,在coord_cartesian中新加入了clip参数,这样可以支持把图层画在画布之外,那么文本打过界也就支持了。这有一个好处,是可以支持direct label,而不需要调整xlimylim,毕竟你把xlimylim搞大有时候会给人以误导,认为你的数据取值范围就是图中的xlimylim,但实际上要小一些。

我以ggtree为例,为了让tip label打全,那么p1把时间给搞到2020,但实际上最近的采样时间是2013年,这样你单看x轴的标记,总感觉有一点点不对路,或者有一点点别扭。现在好了,我不设置xlim,而是让label打过界,当然还是需要有足够的空间来放这些文本,这个可以通过把margin搞大来实现。

Continue reading

I don’t know whether ‘rename taxa’ is a common task or not. It seems not a good idea to rename taxa in Newick tree text, since it may introduce problems when mapping the original sequence alignment to the tree.

If you just want to show different or additional information when plotting the tree, it is fine and easy to do it using ggtree:

Continue reading

当然是ggplot2画,才好和ggtree兼容,你首先问自己,抛开树,你能右边吗?本身你有个矩阵,row的顺序要跟着树来,你可以先不管,先随意,这是y轴。那x轴呢?你矩阵里的数字,打点你总该会的,而点连线,同样column的数字打出来的点,就连在一起,你先按这个思路画出来,再来问后续的。

这是我在「知识星球」中的回答,然而小伙伴表示还是不懂。那么我来详细讲解一下:

首先我们读入一个FASTA数据:

require(treeio)

fasta <- system.file("examples/FluA_H3_AA.fas", package="ggtree")
aa <- read.fasta(fasta)

数据用treeio包里的read.fasta去读这个氨基酸序列,它有个好处是你直接as.character(aa[[i]])就是个字母的向量,方便比较。

n = length(aa)
d = matrix(NA, ncol=n, nrow=n)
nm = labels(aa)
rownames(d) = colnames(d) = nm

for (i in seq_len(n)) {
    for (j in seq_len(i)) {
        d[i, j] = mean(as.character(aa[[i]]) != as.character(aa[[j]]))
        d[j, i] = d[i, j]
    }
} 

这段代码生成了pairwise distance矩阵,你可以搞其它的统计量,都OK的。大家可以想一想,一般这种矩阵怎么可视化?用热图!热图用数字来填充颜色,而现在我们把数字当成x轴上的变量,然后打点,仅此而已,我们有没有办法画出来,当然可以。同样row的数值会在同一y轴上,如果是热图,同一column的数值会在同一x轴上,方便横向和纵向比较,而现在同一column的数值不在同一直线一了,因为我们打的点的位置使用了矩阵中的数值,同一column的点被拉扯到不同的位置上去了,所以为了能够比较或者是看清楚同一column上的点的走势,我们把同一column上的点用线条连接在一起。这就是小伙伴提问的图,就是这么画出来的,非常简单。我在「知识星球」里其实已经解答得很清楚了。

Continue reading

I am trying to add a scale to an unrooted tree with geom_treescale, but when I use it, the tree completely collapses and I am not able to set anything that fix it. Anybody has any idea on how to do it ?

google group里的问题,说他加geom_treescale之后,树被压缩了,由于他没有给出可重复性的例子,所以我们并不知道情况到底有多么糟糕,但这种情况是可能发生的,因为加treescale这种东西,默认情况下geom_treescale会自己去计算该加多大的scale bar,该放在什么位置上,而这种默认情况是基于rectangular布局来的,在假设的情况下,都不可能尽善尽美,假设不成立的情况下当然有可能搞得很差。

Continue reading

Hello all,

When I plot some data using ggtree, the out groups are on a very long branch length. The out groups are 75 and 76 in the example below.

I would like to keep the out groups in the tree but ignore their branch lengths to make presentation easier.

Continue reading

话说有一只蛙,它旅游去了广东,游戏结束。

这篇文章,只想跟大家讲一讲ggtree,你值得拥有的强大的进化树可视化软件,高颜值的图,就在于指尖几行代码中。

最近养蛙很流行,就以蛙为例,读树用read.tree,然后一个ggtree的指令,树就画出来了。而你见证神奇的时刻就在于你不断+geom_xxx加图层,这里我用了geom_tiplab来加taxa label,而这个可不仅仅是名字哦,用emoji也可以,这里我用的竟然是图片,你没看错,也可以。只要指定geom="image"就OK,那个本来要打的文本,就会被当成是文件名,然后读图片画图片,一切尽在我的ggimage包。

Continue reading

Author's picture

Guangchuang Yu

Bioinformatics Professor @ SMU

Bioinformatics Professor

Guangzhou