闪亮的-为什么改变选项卡面板的顺序,选项卡面板不显示绘图?

5

我是shiny的新手。我想从文件中上传数据集并在tabPanel中显示它。接下来的步骤是绘制数据集并在另一个tabPanel中显示绘图。但是当我改变tabPanels的顺序时,绘图没有显示出来。 如果"3D"tabPanel是第一个,绘图将会被显示:

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

但如果“数据”tabPanel是第一个,那么图表将不会显示:

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

需要帮助吗?提前感谢您!

ui.R

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"))
      )
    )
  )
))

serve.R

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]))
      }
    })
})

test.txt

x y z value
1 3 5 33
2 4 6 45
3 6 9 72
4 8 12 81

我有完全相同的问题。如果你已经找到了解决方案,请告诉我。 - discipulus
我还没有找到解决这个问题的方法,而且我又遇到了这个问题。你有什么想法吗? - just_rookie
1个回答

1
我之前也遇到过同样的问题,解决方法是调整 server.R 代码以匹配 ui.R 布局。
由于某些原因,您放置选项卡面板的顺序必须与您在 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()
   })
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"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接