2013-07-14 22 views
5

Ho una domanda generale sull'applicazione R Shiny: ho un elenco di ID che gli utenti finali possono scegliere in un menu a discesa (selectInput) e spero di creare un grafico corrispondente basato su questo ID. In altre parole, la variabile selezionata verrà passata come argomento nella funzione trama, e ogni volta che scelgo un ID diverso, anche la trama viene modificata. Posso sapere se questo è fattibile in Shiny? Apprezzo se qualcuno può fornire un esempio funzionante su problemi simili. Grazie!selezionare una variabile dal menu a discesa e passarla come argomento in reactivePlot in R Shiny

+0

Questo è sicuramente possibile con lucido. Leggi http://rstudio.github.io/shiny/tutorial/#welcome per vedere come –

risposta

13

Ecco un esempio di esempio di esempio con menu a discesa come argomento. L'output di questo programma può essere visualizzato su http://glimmer.rstudio.com/bishwamitrad/ggplot2browser/:

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) 

}) 


}) 
Problemi correlati