我是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)
我之前遇到过同样的问题,解决这个问题的方法是调整 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)
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |