我有一棵看起来像这样的树;
# Create tree
library(phytools)
sim.tree<-pbtree(n=18)
plot(sim.tree)
我有一个具有我的特征(类因子向量)的数据框,可以像这样着色;
# data frame with vector to color tree with
df<-data.frame(tip = paste0("t", 1:18),
vector.to.color.with = as.factor(c("<10", "10-20", "10-20", "10-20", "NA", "10-20",
"10-20", "10-20", "20-35", "<10", "10-20", "<10",
"35", "20-35", "<10", "NA", "10-20", "<10")))
在 SO 的大力帮助下,我能够像这样给小费标签上色;
cols <- as.integer(df$vector.to.color.with[match(sim.tree$tip.label,df$tip)])
plot(sim.tree, tip.color = cols)
我现在想选择自己的颜色,再加上一个图例。任何帮助是极大的赞赏。
这是一个带有自定义颜色的版本:
library(dplyr)
library(phytools)
## library(RColorBrewer)
# Create tree
df<-data.frame(tip = paste0("t", 1:18),
brk = as.factor(c("<10", "10-20", "10-20", "10-20", "NA", "10-20",
"10-20", "10-20", "20-35", "<10", "10-20", "<10",
"35", "20-35", "<10", "NA", "10-20", "<10"))) |>
mutate(color = recode(brk,
"<10" = "red",
"10-20" = "green",
"NA" = "gray",
"20-35" = "blue",
"35" = "black"))
## mutate(color = brewer.pal(6, "Set1")[brk])
set.seed(123)
sim.tree<-pbtree(n=18)
cols <- with(df, as.character(color[match(sim.tree$tip.label, tip)]))
plot(sim.tree, tip.color = cols, x.lim = c(0,3))
with(df,
legend(x=2.5, y=10,
legend = levels(brk),
## col = brewer.pal(6, "Set1"),
col = as.character(levels(color)),
pch = 20,
box.lwd = 1))
这里有一个解决方案,RColorBrewer
它提供了已经很好看的调色板。
library(dplyr)
library(phytools)
library(RColorBrewer)
# Create tree
df<-data.frame(tip = paste0("t", 1:18),
brk = as.factor(c("<10", "10-20", "10-20", "10-20", "NA", "10-20",
"10-20", "10-20", "20-35", "<10", "10-20", "<10",
"35", "20-35", "<10", "NA", "10-20", "<10"))) |>
## mutate(color = recode(brk,
## "<10" = "red",
## "10-20" = "green",
## "NA" = "gray",
## "20-35" = "blue",
## "35" = "black"))
mutate(color = brewer.pal(6, "Set1")[brk])
set.seed(123)
sim.tree<-pbtree(n=18)
cols <- with(df, color[match(sim.tree$tip.label, tip)])
plot(sim.tree, tip.color = cols, x.lim = c(0,3))
with(df,
legend(x=2.5, y=10,
legend = levels(brk),
col = brewer.pal(6, "Set1"),
## col = as.character(levels(color)),
pch = 20,
box.lwd = 1))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句