我正在尝试构建一个仅当用户标记交互式图形复选框时才加载plotly
的Shiny应用程序。但是,到目前为止,无论复选框的值如何,
require('plotly')
require('shiny')
ui <- fluidPage(
tabsetPanel(
id = 'mainTab',
tabPanel(
'conditionally interactive tab',
checkboxInput(
inputId = 'interactive', label = 'Interactive figure', value = FALSE
),
conditionalPanel(
condition = 'input.interactive == TRUE',
plotlyOutput('interactivePlot')
),
conditionalPanel(
condition = 'input.interactive == FALSE',
plotOutput('staticPlot')
)
),
tabPanel('unrelated tab')
)
)
server <- function(input, output, session){
output$interactivePlot <- renderPlotly({
plot_ly(iris, x = ~Petal.Length, y = ~Sepal.Length)
})
output$staticPlot <- renderPlot({
plot(Sepal.Length ~ Petal.Length, iris)
})
}
shinyApp(ui = ui, server = server)
这样做的原因是使用绘图仪时加载时间更长,并且在手持设备上绘图仪的不便(尝试滚动以对触摸做出反应的绘图很困难)。我希望没有单独的选项卡,但我意识到,如果没有其他选择,则可以选择。
答案 0 :(得分:2)
您非常亲密。 conditionalPanel的condition
中的表达式是JavaScript表达式,也不是R表达式。在JavaScript中,它们使用true
/ false
而不是TRUE
/ FALSE
。因此,只需更改它,它就会起作用。
require('plotly')
require('shiny')
ui <- fluidPage(
tabsetPanel(
id = 'mainTab',
tabPanel(
'conditionally interactive tab',
checkboxInput(
inputId = 'interactive', label = 'Interactive figure', value = FALSE
),
conditionalPanel(
condition = 'input.interactive == true',
plotlyOutput('interactivePlot')
),
conditionalPanel(
condition = 'input.interactive == false',
plotOutput('staticPlot')
)
),
tabPanel('unrelated tab')
)
)
server <- function(input, output, session){
output$interactivePlot <- renderPlotly({
plot_ly(iris, x = ~Petal.Length, y = ~Sepal.Length)
})
output$staticPlot <- renderPlot({
plot(Sepal.Length ~ Petal.Length, iris)
})
}
shinyApp(ui = ui, server = server)