闪亮-为什么要更改 tabpanel 的顺序,tabPanel 不显示绘图?

Jus*_*kie 5 r tabpanel shiny

我是shiny. 我想从文件上传数据集并将其显示在tabPanel. 下一步是绘制数据集并在另一个tabPanel. 但是我发现当tabPanels改变顺序时,情节没有显示。如果“3D”tabPanel是第一个,则将显示该图:

tabsetPanel(
            tabPanel("3D", webGLOutput("threeDPlot")), 
            tabPanel("Data", tableOutput("cont"))
          )
Run Code Online (Sandbox Code Playgroud)

但如果“数据”tabPanel是第一个,则不会显示该图:

tabsetPanel(
            tabPanel("Data", tableOutput("cont")),
            tabPanel("3D", webGLOutput("threeDPlot"))                 
          )
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?先感谢您!

用户界面

library(shiny)
library(shinyRGL)
library(rgl)

shinyUI(fluidPage(

  titlePanel(h2("TEST")),

  sidebarLayout(        
    sidebarPanel(
      fileInput("df", label = h3("Load .txt data"), accept=c('text/csv', 
                                                   'text/comma-separated-values,text/plain', 
                                                   '.csv'))  
    ),        
    mainPanel(
      tabsetPanel(
        tabPanel("3D", webGLOutput("threeDPlot")), 
        tabPanel("Data", tableOutput("cont"))
      )
    )
  )
))
Run Code Online (Sandbox Code Playgroud)

服务器

options(rgl.useNULL=TRUE)

library(shiny)
library(shinyRGL)
library(rgl)

shinyServer(function(input, output) {

  dataInput <- reactive({
    validate(
      need(input$df != "", label = "Data set")
    )  

    inFile <- input$df
    data <- read.table(inFile$datapath, header=TRUE, sep="")
    data
  })

  output$cont <- renderTable({
    dataInput()
  })

    output$threeDPlot <- renderWebGL({          
      mydata <- dataInput()          
      clr <- mydata$value/max(mydata$value)
      f <- colorRamp(c("green", "yellow", "purple", "red"))

      for(i in 1:length(mydata$x)){
        shade3d(translate3d(scale3d(cube3d(col=rgb(f(clr[i])/255), alpha=0.15),
                            10.0, 10.0, 2.5), mydata$x[i], mydata$y[i], mydata$z[i]))
      }
    })
})
Run Code Online (Sandbox Code Playgroud)

测试.txt

x y z value
1 3 5 33
2 4 6 45
3 6 9 72
4 8 12 81
Run Code Online (Sandbox Code Playgroud)

inf*_*ash 1

我之前遇到过同样的问题,解决这个问题的方法是调整 server.R 代码以匹配 ui.R 布局。

由于某种原因,您放置 tabPanel 的顺序必须与您在 Shiny 中排序 output$plot 语句的方式相对应。我无法给你解释,但下面是如何解决这个问题。

我不明白为什么 Shiny 不只是寻找正确的输出语句,而是寻找正确的顺序。

作品

 #ui.R

mainPanel(
  tabsetPanel(
    tabPanel("3D", webGLOutput("threeDPlot")), 
    tabPanel("Data", tableOutput("cont"))
  )


#server.R

output$threeDPlot <- renderWebGL({          
  mydata <- dataInput()          
  clr <- mydata$value/max(mydata$value)
  f <- colorRamp(c("green", "yellow", "purple", "red"))

  output$cont <- renderTable({
  dataInput()
   })
Run Code Online (Sandbox Code Playgroud)

ui.R 调用 server.R 输出语句的顺序很重要。确保正确排序!


以下内容将无法正确输出!

不起作用

#ui.R

tabsetPanel(
        tabPanel("3D", webGLOutput("threeDPlot")), 
        tabPanel("Data", tableOutput("cont"))
      )

 #server.R

 output$cont <- renderTable({
dataInput()
 })

output$threeDPlot <- renderWebGL({          
  mydata <- dataInput()          
  clr <- mydata$value/max(mydata$value)
  f <- colorRamp(c("green", "yellow", "purple", "red"))
Run Code Online (Sandbox Code Playgroud)