2017-09-07 110 views
0

標題說得基本上。對於複雜的Shiny應用程序,我必須能夠將NULL值發送到renderPlotly(),因爲我只想在滿足某些條件時才顯示一個繪圖。正常shiny::renderPlot()能夠做到這一點。 一個小例子給出了一個錯誤,我不想:plotly :: renderPlotly()不允許NULL值。我該如何解決方法?

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應用程序只顯示一個錯誤信息,renderPlotly()之一。 我正在尋找任何解決方法。我應該如何在應用程序中同一位置顯示的這兩個圖之間切換,並根據其他輸入始終忽略其中的一個?

+0

你有沒有考慮這一點:https://shiny.rstudio.com/reference/閃亮/最新/ conditionalPanel.html? – Alex

+0

以前沒有看到這個。條件面板可以從服務器訪問對象嗎?含義,我可以訪問從服務器呈現的條件嗎? – Stan125

+1

我認爲這是可能的。看看這裏:https://stackoverflow.com/questions/41710455/shiny-conditionalpanel-set-condition-as-output-from-server。 – Alex

回答

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

感謝您的回答。但是有條件的面板有可能取決於在服務器部分創建的條件嗎? – Stan125

+0

@ Stan125是的。你能舉一個例子你的意思是「在服務器」。如果加載的文件大小大於某些東西或什麼? – PoGibas

+0

我已經嘗試了我想要做的事情,它工作。謝謝! – Stan125

0

當數據爲空時,您可以使用plotly_empty()函數。

假設您在plotly(或NULL)分配給一個名爲 'myplotly' 的變量,你可以使用以下命令:

output$plotly <- renderPlotly({ 
    if(is.null(myplotly)) plotly_empty() else myplotly 
    }) 
相關問題