2015-11-25 6 views
5

Sto cercando di creare un'app Web con il lucido e vorrei visualizzare la trama risultante di una funzione R in una finestra popup anziché in mainPanel. Ad esempio, per l'esempio seguente (da http://shiny.rstudio.com/articles/action-buttons.html), fare clic sul pulsante "Vai" mostrerebbe lo stesso grafico ma in una finestra popup.Lucido: i risultati di stampa nella finestra popup

Ho provato ad aggiungere qualche javascript, ma non ci sono ancora riuscito ... Qualcuno può aiutarmi?

Grazie in anticipo!

library(shiny) 
ui <- fluidPage(
    actionButton("go", "Go"), 
    numericInput("n", "n", 50), 
plotOutput("plot") 
) 
server <- function(input, output) { 
    randomVals <- eventReactive(input$go, { 
    runif(input$n) 
    }) 
    output$plot <- renderPlot({ 
    hist(randomVals()) 
}) 
} 
shinyApp(ui, server) 

risposta

8

sguardo nel shinyBS pacchetto che offre modal popups. L'esempio seguente mostra la trama al clic del pulsante.

EDIT - Aggiunto un pulsante per il download al modale

rm(list = ls()) 
library(shiny) 
library(shinyBS) 

shinyApp(
    ui = 
    fluidPage(
     sidebarLayout(
     sidebarPanel(numericInput("n", "n", 50),actionButton("go", "Go")), 
     mainPanel(
      bsModal("modalExample", "Your plot", "go", size = "large",plotOutput("plot"),downloadButton('downloadPlot', 'Download')) 
     ) 
    ) 
    ), 
    server = 
    function(input, output, session) { 

     randomVals <- eventReactive(input$go, { 
     runif(input$n) 
     }) 

     plotInput <- function(){hist(randomVals())} 

     output$plot <- renderPlot({ 
     hist(randomVals()) 
     }) 

     output$downloadPlot <- downloadHandler(
     filename = "Shinyplot.png", 
     content = function(file) { 
      png(file) 
      plotInput() 
      dev.off() 
     }) 

    } 
) 

enter image description here

+0

Grazie mille per la risposta, funziona perfettamente! Se posso chiedere ancora una cosa, come si aggiunge un pulsante per scaricare la trama? Provo ad aggiungere direttamente una riga in html come: '

' ma non viene visualizzata ... –

+0

Ho modificato la mia risposta per includere il pulsante di download, felice codifica! –

+0

Grazie ancora! Ho provato prima in questo modo ma non ha funzionato. Ci riprovo con il tuo codice e funziona perfettamente ... Dovrei avere un errore nel codice appena sopra ... Risolto ora! Grazie. –

2

si potrebbe usare un conditional panel per mostrare/nascondere un absolute panel contenente il plot, impostare la condizione di qualche variabile js toggled da una funzione collegata al pulsante.

ad es.

conditionalPanel("popupActive==1", 
         absolutePanel(id = "popup", class = "modal", 
             fixed = FALSE, draggable = TRUE, 
             top = 200, right = "auto", left = 400, 
             bottom = "auto", 
             width = 500, height = 500, 
         plotOutput(#output plot stuff#) 
         ) 
         ) 

quindi alterna il valore di popupActive in js per mostrare/nascondere

HTML('<head><script>popupActive = 0; function myFunction(){popupActive=!popupActive;} </script></head>'), HTML('<button id="go" type="button" class="btn btn-default action-button" onclick="myFunction()">Go</button>'), 
+0

Grazie molte per la risposta. Tuttavia, sono novizio in lucido/javascript/ecc. e provo ad aggiungere 'HTML (''), HTML (' ')' ma non funziona ancora. E il valore di popupActive deve essere impostato su 0 quando la finestra popup è chiusa ... Scusa la mia ignoranza, ma posso chiederti una risposta più esplicita (cioè con js)? –

+1

La risposta di braciole di maiale è la strada da percorrere; shinyBS sembra un pacchetto davvero utile. Per completezza ho modificato la mia risposta per includere un esempio di js che funzionerebbe. L'unica modifica necessaria era creare la variabile globale popActive e quindi attivarla sui clic del pulsante ... 'popupActive =! PopupActive' – user5219763