для dotTree
и аналогичных функций в phytools
(например, contMap
), вашим значением черты должен быть именованный вектор с именами, соответствующими подсказкам в вашем дереве.В вашем примере вы должны убедиться, что p$y
- это с именем вектор (!is.null(names(p$y))
должно быть TRUE
):
## Prune down the non Vulpes tips
vulpes_tree <- drop.tip(tree, tree$tip.label[-grep("Vulpes", tree$tip.label)])
## Naming the variables in p$y
all_vulpes <- grepl('Vulpes', p$MSW05_Binomial)
traits_to_plot <- p$y[all_vulpes]
names(traits_to_plot) <- p$MSW05_Binomial[all_vulpes]
## Plotting the Vulpes and the traits
dotTree(vulpes_tree, traits_to_plot)
Вы можете применить ту же процедуру для вашего большегодерево.Я предлагаю вам использовать функцию cleand.data
из пакета dispRity
для соответствия вашему дереву и вашему набору данных:
## Matching the tree and the data (using the dispRity package)
library(dispRity)
## Attributing rownames to the dataset
rownames(p) <- p$MSW05_Binomial
## Cleaning both the data and the tree
cleaned_data <- dispRity::clean.data(p, tree)
## Extracting the cleaned dataset and the cleaned tree
clean_p <- cleaned_data$data
clean_tree <- cleaned_data$tree
## Same for the complete tree
all_traits <- clean_p$y
names(all_traits) <- clean_p$MSW05_Binomial
## Plotting all species and their traits
dotTree(clean_tree, all_traits)