library(readr)
library(stylo)
library(tidyverse)
library(purrr)
library(ape)
library(phangorn)
library(TreeTools)
library(paletteer)
Консенсусные сети
Рисуем деревья, используем fancy палитры и радуемся жизни
Библиотеки
Код
Для начала необходимо представить полученный текстовый файл в табличном формате:
# читаем текстовый файл. Преобразуем в табличный формат.
<- read.table("sholohov.txt", header = TRUE, row.names = 1)
data # транспонируем матрицу, чтобы ряды и столбцы поменялись местами.
<- t(data)
sholohov # превращаем в ДФ
<- as.data.frame.matrix(sholohov) sholohov
Строим консенсусное дерево через stylo и метод BCT:
<- stylo(gui = FALSE,
bct_result frequencies = sholohov,
analysis.type = "BCT",
mfw.min = 100,
mfw.max = 500,
mfw.incr = 100,
distance.measure = "wurzburg",
colors.on.graphs = "greyscale",
write.png.file = FALSE,
consensus.strength = 0.5,
plot.custom.width = 8,
plot.custom.height = 8)
Теперь пишем функцию, которая получает деревья:
# пишем функцию, которая получает деревья
<- function(df) {
get_tree <- df[ , sample(3000, replace = F, size = 100)]
X <- dist(scale(X))
distmx <- as.phylo(hclust(distmx))
tr
tr }
Создаем зерно, проходимся функцией по данным и красим будущую сеть:
#задаем зерно
set.seed(20022025)
#проходим функцией по ДФ
<- map(1:15, ~get_tree(sholohov))
trees_result
#загружаем палитру для будущего графика
<- paletteer_d("ggprism::floral")
pal
# вычисляем консенсус
<- as.multiPhylo(trees_result)
mph <- consensusNet(mph, prob = 0.3, rooted = FALSE)
cons.nw
# раскрашиваем сеть
$col <- str_remove_all(cons.nw$tip.label, "_.+")
cons.nw
<- tibble(label = unique(cons.nw$col),
col_tbl
col = pal)
<- tibble(label = cons.nw$col) |>
color_group left_join(col_tbl)
$col <- color_group$col cons.nw
Рисуем сеть, применяя загруженную ранее палитру:
# рисуем
set.seed(2002)
par(mar = c(1, 1, 1, 1)) # задаем поля
plot(cons.nw, type = "2D",
direction = "horizontal", # названия будут писаться горизонтально
tip.color = cons.nw$col,#используем палитру
edge.color = "grey50",
edge.width = 1,
cex = 0.6)
Получившаяся сеть (сделала текст поменьше, иначе получалась совсем уж каша)