2015-11-25 15 views
5

मैं चमकदार के साथ एक वेब ऐप बनाने की कोशिश कर रहा हूं और मैं मेनपैनल की बजाय पॉपअप विंडो में आर फ़ंक्शन के परिणामस्वरूप साजिश को प्रदर्शित करना चाहता हूं। उदाहरण के लिए, नीचे दिए गए उदाहरण के लिए (http://shiny.rstudio.com/articles/action-buttons.html से), "जाओ" बटन पर क्लिक करें एक ही साजिश दिखाएगा लेकिन पॉपअप विंडो में।चमकदार: पॉपअप विंडो में प्लॉट परिणाम

मैंने कुछ जावास्क्रिप्ट जोड़ने की कोशिश की, लेकिन मैं अभी तक सफल नहीं हुआ ... क्या कोई मदद कर सकता है?

अग्रिम धन्यवाद!

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) 

उत्तर

8

देखो js में popupActive का मूल्य टॉगल। नीचे दिया गया उदाहरण बटन क्लिक पर साजिश दिखाता है।

संपादित करें - मोडल को

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

आपके उत्तर के लिए बहुत बहुत धन्यवाद, यह पूरी तरह से काम करता है! अगर मैं एक और बात पूछ सकता हूं, तो साजिश डाउनलोड करने के लिए आप एक बटन कैसे जोड़ते हैं? मैं एचटीएमएल में सीधे एक पंक्ति जोड़ने की कोशिश करता हूं: '

' लेकिन यह प्रदर्शित नहीं होता है ... –

+0

मैंने डाउनलोड बटन, खुश कोडिंग शामिल करने के लिए अपना जवाब संपादित किया! –

+0

फिर से धन्यवाद! मैंने पहले इस तरह से कोशिश की लेकिन यह काम नहीं किया। मैं आपके कोड के साथ फिर कोशिश करता हूं और यह पूरी तरह से काम करता है ... मुझे बस ऊपर दिए गए कोड में गलती होनी चाहिए ... अभी हल हो गया है! धन्यवाद। –

2

आप एक conditional panel को दिखाने के लिए इस्तेमाल कर सकते हैं, एक absolute panel छिपाने अपने भूखंड युक्त/कुछ js चर एक समारोह अपने बटन से जुड़ी द्वारा चालू किए जाने के लिए शर्त की स्थापना।

उदा।

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

फिर दिखाने/छिपाने shinyBS पैकेज है जो modal पॉपअप प्रदान करता है में

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

एक डाउनलोड बटन लोगों ने आपको आपके उत्तर के लिए एक बहुत धन्यवाद। हालांकि, मैं चमकदार/जावास्क्रिप्ट/आदि में नौसिखिया हूँ। और मैं 'एचटीएमएल जोड़ने की कोशिश (''), एचटीएमएल ('<बटन आईडी =" जाना "प्रकार =" बटन "वर्ग =" btn btn-डिफ़ॉल्ट कार्रवाई -बटन "onclick =" myFunction() "> 'पर जाएं') लेकिन यह अभी भी काम नहीं करता है। और popupActive का मान 0 पर टॉगल किया जाना चाहिए जब पॉपअप विंडो बंद हो जाती है ... मेरी अज्ञानता क्षमा करें, लेकिन क्या मैं आपको एक और स्पष्ट (यानी जेएस के साथ) उत्तर पूछ सकता हूं? –

+1

पोर्क चॉप जवाब जाने का रास्ता है; shinyBS वास्तव में उपयोगी पैकेज की तरह दिखता है। पूर्णता के लिए हालांकि मैंने कुछ जवाब देने के लिए अपना उत्तर संपादित किया है जो काम करेगा। आपको केवल एक ही संशोधन पॉपएक्टिव ग्लोबल वैरिएबल बनाने के लिए था, और उसके बाद इसे बटन क्लिक पर टॉगल करना था ... 'popupActive =! PopupActive' – user5219763

संबंधित मुद्दे