2013-07-14 1 views
5

Ich habe eine allgemeine Frage zu R Shiny-Anwendung: Ich habe eine Liste von IDs, die Endbenutzer in einem Dropdown-Menü auswählen können (selectInput), und ich hoffe, eine entsprechende Handlung basierend auf dieser ID zu machen. Mit anderen Worten, die ausgewählte Variable wird als Argument in der Plot-Funktion übergeben, und jedes Mal, wenn ich eine andere ID wähle, wird auch die Darstellung geändert. Kann ich wissen, ob dies in Shiny machbar ist? Ich schätze es, wenn jemand ein ähnliches Beispiel für ähnliche Probleme geben kann. Vielen Dank!wählen Sie eine Variable aus Drop-Down und übergeben Sie es als Argument in reactivePlot in R Shiny

+0

mit glänzendem Dies ist auf jeden Fall möglich: Die Ausgabe dieses Programms kann auf http://glimmer.rstudio.com/bishwamitrad/ggplot2browser/ eingesehen werden. Lesen Sie http://rstudio.github.io/shiny/tutorial/#welcome, um zu sehen, wie –

Antwort

13

Hier ist ein Beispiel Arbeitsbeispiel mit Dropdown als Argument.

ui.R

library(shiny) 
library(ggplot2) 

## Define UI for miles per gallon application 

dataset <- diamonds 

title <- "Diamonds data Analysis" 

## Define UI for application that plots random distributions 

shinyUI(pageWithSidebar(

    ## Application title 
    headerPanel(title), 

    ## Sidebar with a slider input for number of observations 

    sidebarPanel (

    sliderInput('sampleSize','Sample Size', min=1, max=nrow(dataset), 
       value=min(1000,nrow(dataset)), 
       step=500, 
       round=0), 

    selectInput('x','X',names(dataset)), 
    selectInput('y','Y',names(dataset), 
       names(dataset)[[2]]), 

    selectInput('color','Color',c('None',names(dataset))), 

    selectInput('shape','Shape',c('None',names(dataset))), 

    checkboxInput('jitter','Jitter'), 
    checkboxInput('smooth','Smooth'), 

    selectInput('facet_col','Facet Column', 
       c(None='.',names(dataset))), 

    selectInput('facet_row','Facet Row', 
       c(None='.',names(dataset))) 

), 

    ## Show a plot of the generated distribution 

    mainPanel(plotOutput('plot',height="700px")) 


) 

) 

server.R

library(shiny) 
library(ggplot2) 

## Define server logic required to generate and plot a random distribution 
shinyServer(function(input,output) { 

    dataset <- reactive(function(){ 
    diamonds[sample(nrow(diamonds),input$sampleSize),] 
    }) 

output$plot <- renderPlot(function(){ 

    p <- ggplot(dataset(),aes_string(x=input$x, y=input$y))+geom_point() 

    if(input$color != 'None') 
    p <- p + aes_string(color=input$color) 

    if (input$shape != 'None') 
    p <- p + aes_string(shape=input$shape) 

    facets <- paste(input$facet_row, '~', input$facet_col) 

    if (facets != '. ~ .') 
    p <- p + facet_grid(facets) 

    if (input$jitter) 
    p <- p + geom_jitter() 

    if (input$smooth) 
    p <- p + geom_smooth() 


    print(p) 

}) 


}) 
Verwandte Themen