Как я могу создать большую танглограмму в R, которая доступна для чтения и может быть сохранена

#r #dendrogram #phylogeny #dendextend

#r #дендрограмма #филогения #dendextend

Вопрос:

Я использую cophyloplot для создания запутанной диаграммы из двух филогенетических деревьев. Метод хорошо работает с небольшими деревьями, но по мере увеличения деревьев выходное изображение остается того же размера, и я не могу найти способ его расширить.

Ниже приведен код для небольшого дерева, который работает нормально (в основном такой же, как в примере: https://www.rdocumentation.org/packages/ape/versions/5.4-1/topics/cophyloplot ):

 library(ape)

#two random trees
TreeA <- rtree(10)
TreeB <- rtree(10)

#creation of the association matrix:
association <- cbind(TreeB$tip.label, TreeB$tip.label)

cophyloplot(TreeA, TreeB, assoc = association, length.line = 4, space = 28, gap = 3)
  

Это то, что создает небольшой древовидный код:

введите описание изображения здесь

Но когда я использую большие деревья, они становятся нечитаемыми. Например, использование деревьев со 100 подсказками приводит к следующему: введите описание изображения здесь

Невозможно прочитать метки подсказок. Как я могу расширить рендеринг, чтобы он был доступен для чтения?

Комментарии:

1. ps: это вопрос r, а не вопрос python. Я исправил теги по этому вопросу.

Ответ №1:

Функция tanglegram имеет множество опций для улучшения вывода получаемого изображения (особенно аргументы lab.cex и margin_inner). Вероятно, самый важный фактор, хотя он является внешним по отношению к tanglegram и является размером вашего графического устройства (через dev.new), поэтому игра с шириной и высотой, вероятно, решит большую часть проблемы

Вот простой автономный код, который показывает, как играть с этими опциями, чтобы получить хороший результат.

 ########
## Nice example of some colored trees
# see the coloring of common sub trees:
set.seed(23235)
ss <- sample(1:150, 100)
dend1 <- iris[ss, -5] %>%
  dist() %>%
  hclust("com") %>%
  as.dendrogram()
dend2 <- iris[ss, -5] %>%
  dist() %>%
  hclust("sin") %>%
  as.dendrogram()
dend12 <- dendlist(dend1, dend2)
# dend12 %>% untangle %>% tanglegram
dev.new(width=5, height=4)

dend12 %>% tanglegram(common_subtrees_color_branches = TRUE,
                      lab.cex = .5, margin_inner = 1.3)
  

введите описание изображения здесь

Ответ №2:

##Я надеюсь, что этот код поможет для большого дерева

 library(ape)
library(phytools)
library(dendextend)
library(viridis)
library(dplyr)
library(phylogram)

tree1 <- read.tree(file = "c1.raxml.bestTree")
tree1 <- midpoint.root(tree1)
tree2 <- read.tree(file = "c1_gubbins.raxml.bestTree")
tree2 <- midpoint.root(tree2)
tree1 <- compute.brlen(tree1)
tree2 <- compute.brlen(tree2)
tree1<- as.dendrogram(tree1)
tree1
tree2<- as.dendrogram(tree2)
dndlist <- dendextend::dendlist(tree1, tree2)
dendextend::tanglegram(dndlist, fast = TRUE, margin_inner = 1.8, lab.cex = 0.3, lwd = 
0.5, edge.lwd = 0.5, type = "r")
dev.copy(pdf, 'Discrete001.pdf', width = 10, height = 11)
dev.off()