Search code examples
rshinyggvis

Reactivity while using ggvis/shiny


I am new to Shiny/ggvis and I want to create a scatter plot that allows the user to select from an X and Y dropdown. I have attempted this feat may times to no avail and would greatly appreciate some help. Please see the code below.

library(shiny)
library(ggvis)
library(dplyr)

# Define the user interface

  shinyUI(pageWithSidebar(
    # Add a title to this page

    headerPanel(
      h1("Test the Header Panel!")),


    sidebarPanel(
      uiOutput("ggvis_ui"),
      sliderInput(inputId = "size",label = "Area",10, 1000, value = c(10)),
      selectInput(inputId = "yAxis",label = "Y variable", c("wt","drat")),      
      selectInput(inputId = "xAxis",label = " X variable", c("cyl", "am","gear"))),



    mainPanel(
      h1("Please review the chart below showing nothing!"),

      ggvisOutput("ggvis")

      )


  )

  )

Server.r

# Create server.R

    shinyServer(function(input, output, session) {

      # A reactive expression wrapper for input$size
      input_size <- reactive(input$size)
      input_xAxis <- reactive(input$xAxis)
      input_yAxis <- reactive(input$yAxis)

      # A reactive expression wrapper for input$size


      mtcars %>% 
        ggvis(x =input_xAxis, y = input_yAxis, size := input_size) %>%
        layer_points() %>%
        bind_shiny("ggvis", "ggvis_ui")


    })

Solution

  • The two things you are missing is making the plot reactive and using prop for setting properties when the variables names are strings.

    The following change to the server code returns a reactive graphic:

    plot = reactive({
        mtcars %>%
        ggvis(prop("x", as.name(input_xAxis())), 
             prop("y", as.name(input_yAxis())), 
             size := input_size) %>%
        layer_points()
        })
    
    plot %>%
        bind_shiny("ggvis", "ggvis_ui")