r - 将图例添加到 ggtree (ggplot) R

标签 r ggplot2 ggtree

我正在 R 上使用 ggtree 构建一棵树。

library(ggtree)

这是 newick 文件内容:

tree = read.newick("newick_tree")

这是我使用的代码:

colfunc <- colorRampPalette(c("red", "blue"))
col=colfunc(110)


for (i in 1:length(tree$node.label)){
  if(as.vector(tree$node.label[i])>0.99){
    col[i]<-'#CB1414'
  } else if(as.vector(tree$node.label[i])>0.90 & (as.vector(tree$node.label[i]) < 0.99)){
    col[i]<-'#F0F014'
  } else if(as.vector(tree$node.label[i])>0.76 & (as.vector(tree$node.label[i]) < 0.90)){
    col[i]<-'#098527'
  } else if(as.vector(tree$node.label[i])>0.51 & (as.vector(tree$node.label[i]) < 0.76)){
    col[i]<-'#18D8F7'
  } else if(as.vector(tree$node.label[i])>0 & (as.vector(tree$node.label[i]) < 0.50)){
    col[i]<-'#1B72DB'
  }
}
p<-ggtree(tree,size=0.5,branch.length="none")   +geom_tiplab(size = 2, col ="black")  + geom_nodepoint(color=col, alpha=1, size=1.5, show.legend = TRUE)+ 
  geom_treescale(x=30, y=1)

为了根据引导级别获取点颜色,我使用了这部分:geom_nodepoint(color=col, alpha=1, size=1.5, show.legend = TRUE) 其中 col 是一个变量,例如:

> col
  [1] "#CB1414" "#FC0002" "#FA0004" "#F70007" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414"
 [15] "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#F0F014" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414"
 [29] "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414"
 [43] "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#F0F014" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#098527" "#CB1414"
 [57] "#CB1414" "#18D8F7" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414"
 [71] "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#F0F014" "#098527" "#098527" "#CB1414"
 [85] "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#F0F014" "#CB1414" "#098527" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#1B72DB"
 [99] "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414" "#CB1414"

我根据这个变量中的数字制作:

> tree$node.labe
  [1] "1"    ""     ""     "0.99" "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"   
 [21] "1"    "0.97" "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"   
 [41] "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "0.98" "1"    "1"    "1"    "1"    "0.89" "1"    "1"    "0.64" "1"    "1"   
 [61] "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"   
 [81] "0.92" "0.8"  "0.77" "1"    "1"    "1"    "1"    "1"    "0.96" "1"    "0.84" "1"    "1"    "1"    "1"    "1"    "1"    "0.48" "1"    "1"   
[101] "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"    "1"   

现在我只想在树中显示 5 个范围的颜色图例,例如: enter image description here

但选项 show.legend = TRUE 对此不起作用。 有人有想法吗?我还尝试添加 p + theme(legend.position="right") 但仍然没有图例。

感谢您的帮助。

这是代表(树)

最佳答案

树中的节点数为 221,最终点有 111 个。因此,您的 col 向量需要有 221 个元素;前 111 个指定最终点的颜色。
以下是从 tree$node.label 开始创建正确 col 向量的方法:

x <- c(rep(NA,111), as.numeric(tree$node.label)*100)
col <- cut(x, breaks=c(0,50,75,90,99,100))
col <- factor(col, levels=rev(levels(col)))
col <- factor(col, labels=c("100%","91-99%","76-90%","51-75%","0-50%"))

节点点可以使用颜色美学来着色:

library(ggtree)
library(ggplot2)
p <- ggtree(tree, size=0.5,branch.length="none")   +
    geom_tiplab(size = 2, col ="black")  + 
    geom_point(aes(color=col), alpha=1, size=1.5, show.legend = TRUE) + 
    geom_treescale(x=30, y=1) +
    theme(legend.position="right") +
    scale_colour_manual(na.translate = F, name="Bootstrap support",
                        values=c("#CB1414","#F0F014","#098527","#18D8F7","#1B72DB")) +
    guides(color = guide_legend(override.aes = list(size = 5))) 
p

enter image description here

关于r - 将图例添加到 ggtree (ggplot) R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55722055/

相关文章:

r - 检查一个数据帧列中的值或模式与另一列是否匹配

r - 在 R 中的 svyplot() 中用颜色填充气泡(调查包)

r - 将字符串传递给 ggplot 函数

Python ggplot 和 ggplotly

html - R Shiny : use HTML within functions (like textInput, checkboxGroupInput)

r - 将所有列名及其索引对保存为数据框/字典

r - ggtree::facet_plot - 第二个面板使用第一个面板中的 xlim 参数

从 ggtree 图中删除 'a'

r - 使用 ggplot2 显示堆叠直方图中 bin 元素的总数

r - 如何在 ggtree 中绘制彩色提示标签而不将其作为图例的一部分?