标题基本上说。对于复杂的Shiny App,我必须能够将NULL值发送到renderPlotly()
,因为我只想在满足某些条件时才显示绘图。正常shiny::renderPlot()
能够做到这一点。
一个小例子,它给出了我不想要的错误:
library(shiny)
library(plotly)
ui <- fluidPage(
plotlyOutput("plotly"),
plotOutput("plot")
)
server <- function(input, output) {
# I need to be able to put NULL in here or anything so that
# there is no output and also no error message.
output$plotly <- renderPlotly({
NULL
})
# This works and sends no error message
output$plot <- renderPlot({
NULL
})
}
shinyApp(ui, server)
请注意,Web App仅显示一条错误消息,即renderPlotly()
中的消息。
我正在寻找任何解决方法。如何在应用程序中同一位置显示的两个图之间切换,并根据其他输入始终忽略其中一个?
答案 0 :(得分:2)
当数据为空时,您可以使用plotly_empty()函数。
假设您将情节(或NULL)分配给名为“myplotly”的变量,您可以使用以下内容:
output$plotly <- renderPlotly({
if(is.null(myplotly)) plotly_empty() else myplotly
})
答案 1 :(得分:1)
使用shiny::conditionalPanel
的示例。只有在满足某些条件时才会显示绘图。
library(ggplot2)
library(plotly)
library(shiny)
ui <- fluidPage(
selectInput("shouldShow", "show plot", c("yes", "no"), "yes"),
conditionalPanel(
condition = "input.shouldShow == 'yes'",
plotlyOutput("foo")
)
)
server <- function(input, output) {
output$foo <- renderPlotly({
gg <- ggplot(mtcars, aes(cyl, mpg)) + geom_point()
ggplotly(gg)
})
}
shinyApp(ui, server)