Home > Blockchain >  Shiny app plot related question -reactive
Shiny app plot related question -reactive

Time:11-05

I am having two columns in my data frame, one is "all_pass" which contains numeric values and other is "st_name" which contains string values name of states

The requirement of the plot is , when user give input of the state it will show the plot of that particular state which contains all_pass numbers

Following is the code in which I am trying to plot, where the user will input the name of the state and as per the input of the state name, the graph will plot as per the all_pass as per the related pass scores to that particular state. Kindly help in the following code, will be of great help.

Code is as mentioned below :

library(ggplot2)

library(plotly)
library(dplyr)

library(shiny)



ui <- basicPage(
  h1("Total bills passed by state delegation , 110th Congress"),
  selectizeInput(inputId = "bins",label = "Choose State",
    choices = list("AK","AL","AR","AS","AZ","CA","CO","CT","DC","DE","FL","GA","GU","HI","IA","ID","IL","IN","KS","KY","LA","MA","MD","ME","MI","MN","MO","MS","MT","NC","NE","ND","NH","NJ","NM","NV","NY","OH","OK","OR","PA","PR","RI","SC","SD","TN","TX","UT","VA")  ,multiple = TRUE ,plotOutput("plot"))
  
  )
  

server <- function(input, output) {

  data <- reactive({
    require(input$bins)
    df <- df7 %>% filter(st_name %in% input$bins)
  })
    output$plot <- renderPlot({
      ggplot(df(), aes(y= all_pass,x=st_name )) geom_bar(stat = "sum")
         })
}


shinyApp(ui = ui, server = server)

CodePudding user response:

  1. in the UI definition you have plotOutput("plot") as an argument to selectizeInput() instead of basicPage(). Reformatting your code (Ctrl Shift A) would have made that more visible.
  2. You can simplify the server code, as the renderPlot() already creates a reactive dependence on input$bins.
  3. You can use the object datasets::state.abb to get a vector of US state abbreviations. This is loaded automatically in every R session.

Please see some working code below. I am using some mock data for df as you did not provide any data in your question.

library(ggplot2)
library(plotly)
library(dplyr)
library(shiny)

ui <- basicPage(
  h1("Total bills passed by state delegation, 110th Congress"),
  selectizeInput(inputId = "bins",
                 label = "Choose State",
                 choices = state.abb,
                 multiple = TRUE),
  plotOutput("plot")
  
)

server <- function(input, output) {
  
  df <- 
    tibble(all_pass = sample(1:500, 350),
           st_name = rep(state.abb, 7))

  output$plot <- renderPlot({
    req(input$bins)
    df |> 
      filter(st_name %in% input$bins) |> 
      ggplot(aes(y = all_pass,x=st_name ))   
      geom_bar(stat = "sum")
  })
}


shinyApp(ui = ui, server = server)
  • Related