2015-11-25 8 views
5

Ich versuche, eine Web-Anwendung mit glänzend zu erstellen und ich möchte das resultierende Diagramm einer R-Funktion in einem Popup-Fenster statt in MainPanel anzeigen. Für das folgende Beispiel (von http://shiny.rstudio.com/articles/action-buttons.html) würde das Klicken auf die Schaltfläche "Go" das gleiche Diagramm aber in einem Popup-Fenster anzeigen.Shiny: Plot Ergebnisse in Popup-Fenster

Ich habe versucht, etwas Javascript hinzuzufügen, aber ich bin noch nicht gelungen ... Kann jemand helfen?

Vielen Dank im Voraus!

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) 

Antwort

8

Blick in shinyBS Paket zu zeigen, die modal Popups bietet. Das folgende Beispiel zeigt das Diagramm bei einem Klick auf die Schaltfläche.

EDIT - eine Download-Button zum Modal Hinzugefügt

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

Vielen Dank für Ihre Antwort, es funktioniert perfekt! Wenn ich noch eine Frage stellen kann, wie fügen Sie einen Knopf hinzu, um die Handlung herunterzuladen? Ich versuche, direkt eine Zeile in html hinzuzufügen wie: '

' aber es zeigt nicht an ... –

+0

Ich bearbeitete meine Antwort, um den Download-Button, Happy Coding! –

+0

Nochmals vielen Dank! Ich habe es zuerst auf diese Weise versucht, aber es hat nicht funktioniert. Ich versuche es erneut mit deinem Code und es funktioniert perfekt ... Ich sollte einen Fehler im Code gerade oben haben ... Gelöst jetzt! Vielen Dank. –

2

könnten Sie ein conditional panel verwenden, um ein-/auszublenden ein absolute panel Ihre Handlung enthalten, um den Zustand zu einem gewissen js Variable durch eine Funktion, um Ihre Taste angebracht umgeschaltet Einstellung.

z.B.

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#) 
         ) 
         ) 

dann den Wert von popupActive in js ein-/auszublenden

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

Danke sehr viel für Ihre Antwort. Allerdings bin ich Neuling in shiny/javascript/etc. und ich versuche, HTML hinzuzufügen (''), HTML (' ') aber es funktioniert immer noch nicht. Und der Wert von popupActive sollte auf 0 gesetzt werden, wenn das Popup-Fenster geschlossen wird ... Entschuldige meine Unwissenheit, aber darf ich dich um eine explizitere Antwort bitten (d. H. Mit js)? –

+1

Pork Chops Antwort ist der Weg zu gehen; shinyBS sieht wie ein wirklich nützliches Paket aus. Der Vollständigkeit halber, obwohl ich meine Antwort bearbeitet habe, um ein Beispiel der einigen js einzuschließen, die funktionieren würden. Die einzige Änderung, die Sie benötigten, war, die globale Variable popActive zu erstellen und sie dann auf Schaltflächenklicks umzuschalten ... 'popupActive =! PopupActive' – user5219763