【发布时间】:2020-07-23 08:42:29
【问题描述】:
下面的例子是使用ggtree,我可以在其中刷系统发育中的提示并添加注释标签(“进化枝”)。让应用运行的步骤 -
- 加载树 - 称为 vert.tree
- 刷过(突出显示)提示(用人类和狐猴测试)并按“注释树”按钮以添加红色标签。
我想要做的是在树上添加另一个注释,同时保留第一个注释(人类和狐猴)。例如,猪和牛提示的第二个标签。本质上,我希望能够根据用户输入在系统发育树上添加一行,然后根据用户的第二个输入重复该操作,同时保持图像上的第一行。目前,每次我刷不同对时,标签都会重置,因此一次只显示一个注释。
# This is a Shiny web application. You can run the application by clicking
# the 'Run App' button above.
library(shiny)
library(treeio)
library(ggtree)
library(phytools)
library(ape)
#make phylogenetic tree
text.string <-"(((((((cow, pig),whale),(bat,(lemur,human))),(robin,iguana)),coelacanth),gold_fish),shark);"
#read in the tree
vert.tree<-ape::read.tree(text=text.string)
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Test"),
actionButton("add_annotation","Add clade annotation"),
# Show a plot of the generated distribution
mainPanel(plotOutput("treeDisplay", brush ="plot_brush")
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
#reactive that holds base tree - this is how I am building the base tree
make_tree <- reactive({
ggtree::ggtree(vert.tree)+
ggtree::geom_tiplab()+
ggplot2::xlim(NA, 10)})
#render base tree
output$treeDisplay <- renderPlot({
make_tree()
})
#reactive that holds the brushed points on a plot
dataWithSelection <- reactive({
brushedPoints(make_tree()$data, input$plot_brush)
})
#add to label to vector if isTip == True
dataWithSelection2 <- reactive({
tipVector <- c()
for (i in 1:length(dataWithSelection()$label)){ if(dataWithSelection()$isTip[i] == TRUE) tipVector <- c(tipVector,dataWithSelection()$label[i])}
return(tipVector)
})
# incorporate the tipVector information for adding layer
layer <- reactive({
ggtree::geom_cladelabel(node=phytools::findMRCA(ape::as.phylo(make_tree()), dataWithSelection2()), label = "Clade", color = "red")
})
#display that layer onto the tree
observeEvent(input$add_annotation, {
output$treeDisplay <- renderPlot({make_tree() + layer()})
})
}
# Run the application
shinyApp(ui = ui, server = server)
非常感谢您的建议!
更新为包含基础树 (vert.tree)
【问题讨论】:
-
您好,我们不应该仅仅为了了解和查看您的问题而执行所有这些步骤。你应该让你的例子reproducible,即修改你的例子,这样我们只需要这篇文章的内容就可以看到你的问题是什么。如果您在帖子中放置的链接将来被破坏,未来的用户将无法理解您的问题是什么,因此不太可能理解解决方案。
-
感谢您指向讨论可重现示例的页面。上面代码的当前显示是运行和查看问题所需的最低限度的 r 代码。我想我可以包含生成示例系统发育树的代码,不幸的是,我现在还没有。
-
如果您无法添加数据样本,请尝试使用 base R 中包含的一些数据(例如
mtcars或iris)重现此示例 -
我已经通过构建一个不是要读取的文件的树来添加示例数据。
标签: r shiny annotations phylogeny ggtree