gpt4 book ai didi

r - 树形图显示在 R 中,但不在 R-Shiny 中

转载 作者:行者123 更新时间:2023-12-04 10:10:05 26 4
gpt4 key购买 nike

我可以使用 data.tree包产生一个情节。这是一个情节的例子:

library(data.tree)

org <- Node$new("Parent")
org$AddChild("Child_1")
org$AddChild("Child_2")

plot(org)

但是,我无法在 R-Shiny 中渲染此图。我已经能够在 Shiny 中渲染大多数其他情节。我能做些什么来渲染这个情节,为什么它没有出现?这是我的 Shiny 代码:

library(shiny); library(data.tree)

ui <- fluidPage(
mainPanel(plotOutput("orgplot") )
)

server <- function(input, output){
rv <- reactiveValues()

org <- Node$new("Parent")
org$AddChild("Child_1")
org$AddChild("Child_2")

output$orgplot <- renderPlot({ plot(org)})
}

shinyApp(ui = ui, server = server)

最佳答案

plot(org) 生成类 grViz 的小部件,因此您可以使用 renderGrViz 以 Shiny 的方式显示绘图。

Like(textInput 用于更改“父”的名称)

  library(shiny); 
library(data.tree)
library(DiagrammeR)
ui <- fluidPage(
mainPanel(grVizOutput("xx") ),
textInput("parent","parent","parent")
)

server <- function(input, output){
output$xx=renderGrViz({
org <- Node$new(input$parent)
org$AddChild("Child_1")
org$AddChild("Child_2")
grViz(ToGraphViz(org),engine = "dot")
})
}


shinyApp(ui = ui, server = server)

动态更新添加节点

如果您想动态添加节点,您可以尝试按名称将子节点添加到节点(您需要进行一些检查以避免名称重复)

绘制图表的新函数来自@rpm 答案

 ui <- fluidPage(
mainPanel(uiOutput("add_child_ui"),
grVizOutput("xx") )
)

server <- function(input, output){
#Create reative value to app
vv=reactiveValues(org=NULL,names=NULL)

#create main tree
observe({
vv$org <- Node$new("Parent1")
vv$org$AddChildNode(child = Node$new("1"))
vv$names=vv$org$Get('name') # get names of main tree
})

output$add_child_ui=renderUI({
list(
wellPanel(
selectInput("Name_to_change","Name_to_change",vv$names),
textInput("new_name","new_name",""),
actionButton("Change_name","Change_name")
),
wellPanel(
selectInput("Parent_name","Parent_name",vv$names),
textInput("new_node_name","new_node_name",""),
actionButton("add_child","add_child")
))
})
observeEvent(input$Change_name,{

aa=FindNode(node=vv$org,name = input$Name_to_change)
aa$name=input$new_name # Change name
vv$names=vv$org$Get('name')# get names of new tree

#re-generate chart
output$xx=renderGrViz({

grViz(DiagrammeR::generate_dot(ToDiagrammeRGraph(vv$org)),engine = "dot")
})
})

observeEvent(input$add_child,{

FindNode(node=vv$org,name = input$Parent_name)$AddChildNode(Node$new(input$new_node_name)) # add child
vv$names=vv$org$Get('name')# get names of new tree

#re-generate chart
output$xx=renderGrViz({

grViz(DiagrammeR::generate_dot(ToDiagrammeRGraph(vv$org)),engine = "dot")
})
})

output$xx=renderGrViz({

grViz(DiagrammeR::generate_dot(ToDiagrammeRGraph(vv$org)),engine = "dot")
})
}


shinyApp(ui = ui, server = server)

关于r - 树形图显示在 R 中,但不在 R-Shiny 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39668829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com