6

I have a general question about R Shiny application: I have a list of IDs that end-users can choose from in a drop-down menu (selectInput), and I hope to make a corresponding plot based on this ID. In other words, the selected variable will be passed as an argument in the plot function, and each time I choose a different ID, the plot is also changed. Can I know if this is doable in Shiny? I appreciate if anyone can provide a working example on similar problems. Thank you!

1

1 Answer 1

15

Here is a sample working example with dropdown as an argument. The output of this program can be viewed on 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)

})


})
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.