2013-07-14 5 views
5

Mam ogólne pytanie dotyczące aplikacji R Shiny: mam listę identyfikatorów, z których użytkownicy końcowi mogą wybierać w rozwijanym menu (selectInput), i mam nadzieję stworzyć odpowiedni wykres oparty na tym ID. Innymi słowy, wybrana zmienna zostanie przekazana jako argument w funkcji wykresu, a za każdym razem, gdy wybiorę inny identyfikator, wykres zostanie również zmieniony. Czy mogę się dowiedzieć, czy jest to wykonalne w Shiny? Doceniam, czy ktokolwiek może podać działający przykład podobnych problemów. Dziękuję Ci!wybierz zmienną z listy rozwijanej i podaj ją jako argument w reactivePlot w R Shiny

+0

Jest to z pewnością możliwe błyszczące. Przeczytaj http://rstudio.github.io/shiny/tutorial/#welcome, aby zobaczyć, jak –

Odpowiedz

13

Oto przykładowy przykład pracy z rozwijanym menu jako argumentem. Wyjście z tego programu mogą być przeglądane na 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) 

}) 


}) 
Powiązane problemy