Выровняйте ggtree с осью фасета другого ggplot - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу выровнять ggtree с другим графиком, ограненным теми же переменными, что и надписи для ggtree.

Данные / графики

tree <- ggtree(ape::read.tree(text='(ant:17, (bat:31, cow:22):7);')) + 
  geom_tiplab(align=TRUE, linesize=.5) +
  theme_classic() # is ugly but gives a better idea of the structure

d1 <- data.frame(
  source = c('ant','bat','cow','cow','cow','cow'),
  value  = c(10,8,7,3,4,6),
  row.char    = c('ant1', 'ant1','cow1','cow2','cow3','cow4')
)
p1 <- ggplot(d1, aes(y=row.char, x = value)) + geom_point() + facet_grid(source ~ .)

Взгляд на графики
Давайте сначала построим эту диаграмму бок о бок cowplot::plot_grid(tree, p1): enter image description here

То, что я пытаюсь достичь
Я хочу выровнять метку листа с центром соответствующего фасета, поэтому cow в дереве должно выровняйте с cow фасетом в p1. Я знаю, что можно использовать aplot, чтобы выровнять метки дерева с осью y p1 (см. Нижнюю страницы руководства ggtree ), однако я не смог сделать эту работу с метками фасетов ,

Ps мое дерево и график намного сложнее, однако только для 3 из 40 графиков "p1" мне нужно две или три оси на source

...