2015-07-12 33 views
2

我是shiny的新手。我想从文件上传数据集并将其显示在tabPanel中。下一步是绘制数据集并在另一个tabPanel中显示该图。但是我发现当tabPanels的顺序改变时,情节没有显示。 如果“3D” tabPanel是第一,剧情会显示:shiny-为什么改变tabpanels的顺序,tabPanel不显示plot?

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 
+0

我有完全一样的问题。如果您发现解决方案请告诉我。 – discipulus

+0

我还没有找到解决此问题的解决方案,并且我又遇到了问题。那么你有什么想法吗? –

回答

0

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

出于某种原因,您放置tabPanels的顺序必须与您在Shiny中命令输出$ plot语句的方式一致。我不能给你一个解释,但下面是如何解决这个可能的。

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

WORKS

#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")) 
相关问题