我是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
答案 0 :(得分:1)
之前我遇到过同样的问题,解决方法是调整server.R代码以匹配ui.R布局。
由于某种原因,你放置tabPanel的顺序必须与你在Shiny中订购输出$ plot语句的方式一致。我无法给你一个解释,但下面是如何解决这个问题。
我不明白为什么Shiny并不只是寻找正确的输出语句而是寻找正确的顺序。
<强> WORKS 强>
git
ui.R调用server.R输出语句的顺序很重要。确保你正确排序!
以下内容无法正常输出!
DOESN&#39; WORK
#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()
})