[英]Tree plot displays in R, but not in R-Shiny
I am able to use the data.tree package to produce a plot. 我可以使用data.tree包来生成一个图。 Here is an example of a plot:
这是一个情节的例子:
library(data.tree)
org <- Node$new("Parent")
org$AddChild("Child_1")
org$AddChild("Child_2")
plot(org)
However, I am not able to render this plot in R-Shiny. 但是,我无法在R-Shiny中渲染这个情节。 I have been able to render most other plots in Shiny.
我已经能够渲染Shiny中的大多数其他情节。 What can I do to render this plot, and why is it not showing up?
我该怎么做才能渲染这个情节,为什么它没有出现? Here is my Shiny code:
这是我的闪亮代码:
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)
generate widget of class grViz
So you can use renderGrViz
to show plot in shiny. plot(org)
生成类grViz
小部件所以你可以使用renderGrViz
来显示闪亮的情节。
Like ( textInput
used for example of change name of "parent") 喜欢(
textInput
用于更改名称“parent”的示例)
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)
Update add node dynamically 动态更新添加节点
If You want to add nodes dynamically you can try to add child to node by name( you need some checks to avoid names duplicate) 如果要动态添加节点,可以尝试按名称将子节点添加到节点(需要进行一些检查以避免名称重复)
New functions to draw chart get from @rpm answer 绘制图表的新功能来自@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)
This code does not work as the ToGraphViz function has been retired from DiagrammeR and replaced with ToDiagrammerGraph. 此代码不起作用,因为ToGraphViz函数已从DiagrammeR退出并替换为ToDiagrammerGraph。 The following change works.
以下更改有效。
# grViz(ToGraphViz(org),engine = "dot")
grViz(DiagrammeR::generate_dot(ToDiagrammeRGraph(org)))
Also, "parent" is a reserved word so I replaced it "parent2". 另外,“父”是保留字,所以我将其替换为“parent2”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.