2

我正在使用以下代码创建缠结图:

library(ggtree)
library(ape)

tree1 <- read.tree(text='(((A:4.2,B:4.2):3.1,C:7.3):6.3,D:13.6);')
tree2 <- read.tree(text='(((B:4.2,A:4.2):3.1,C:7.3):6.3,D:13.6);')

p1 <- ggtree(tree1)
p2 <- ggtree(tree2)

d1 <- p1$data
d2 <- p2$data

d2$x <- max(d2$x) - d2$x + max(d1$x) + 1

pp <- p1 + geom_tree(data=d2)

dd <- bind_rows(d1, d2) %>% 
  filter(!is.na(label))

final_plot <- pp + geom_line(aes(x, y, group=label), data=dd, color='grey')

我想要做的是根据节点的位置为线条着色。换句话说,如果线是直的,即它们在两棵树中的位置相同,则颜色应为 x,而如果它们已更改,则应为 y。

像这样的东西: 在此处输入图像描述

获得一个传说来解释颜色也很好。

4

1 回答 1

1

您可以在其中构造一列dd来检查该行是否是水平的。在这里,我按标签分组并检查唯一 ID 的数量是否为 1。然后将该列用于该行中的color参数aes

dd <- dd %>% group_by(label) %>% mutate(is.horiz = n_distinct(node) == 1)
pp + 
  geom_line(aes(x, y, group=label, color = is.horiz), data=dd) +
  scale_color_manual(values = c('TRUE' = "lightblue", 'FALSE' = "purple")) +
  theme(legend.position = c(.9,.9)) +
  labs(color = 'Horizontal Nodes')

在此处输入图像描述

你可以玩弄线条的颜色和所有东西的名称。

于 2019-07-23T20:49:30.983 回答