0

So, I have attached what my data looks like. I have all of the variables in 1 column and their values for a specific date and state in another column.

First few rows of my data.

I want my users to be able to click on the graph and it take them to the corresponding data. You can do this in Javascript, but I am using Shiny, so my project is in R. So, I made the proper changes, using this and this as an examples, and this as a guide. Instead of using location.href like I would in Javascript, I used browseURL. When I use browseURL, it fires as soon as the page opens up instead of firing when I click the line graph. Is there a way to restrict browseURL so that it only fires when clicked?

library(shiny)
library(highcharter)
library(dplyr)

data <- read.csv("data/daily states.csv")

ui <- fluidPage(
    
    titlePanel("Timeline"),
    
    sidebarLayout(
        
        sidebarPanel(
            
            h2("Actions", align="center"),
            
            fluidRow(
                column(5,
                       selectizeInput("state", 
                                      h3("State:"),
                                      c("All",
                                        unique(data$state))))
            ),
            
            fluidRow(
                column(5,
                       selectInput("outcome",
                                   h3("Outcome:"),
                                   c("All",
                                     unique(data$variable))))
            ),
            
            fluidRow(
                column(5,
                       dateRangeInput("date",
                                      h3("Date range"),
                                      min = "2020-01-22",
                                      start = "2020-01-22",
                                      end = as.character(Sys.Date())))
            ),
            
            fluidRow(
                column(5,
                       checkboxInput("federal",
                                     "Show federal level",
                                     value = TRUE))
            )
        ),
        
        mainPanel(
            tabsetPanel(type = "tabs",
                        tabPanel("Plot", highchartOutput("hcontainer")),
                        tabPanel("Table", DT::dataTableOutput("table"))),
        )
    )
)

server <- function(input, output, session){
    
    newData <- reactive({
        if (input$state != "All"){
            data <- filter(data, state == input$state)
        }
        if (input$outcome != "All"){
            data <- filter(data, variable == input$outcome)
        }
        data
    })
    
    output$table <- DT::renderDataTable(DT::datatable({
        newData()
    }))
    
    output$hcontainer <- renderHighchart({
        
        hc <- highchart(type = "chart") %>%
            hc_xAxis(categories = unique(newData()$date)) %>%
            hc_plotOptions(series = list(
                allowPointSelect = TRUE,
                cursor = "pointer",
                point = list(
                    events = list(
                        click = browseURL(paste('https://covidtracking.com/data/state/',input$state,'/#historical', sep = ""))
                        )
                    )
                )
            ) %>%
            hc_add_series(name = (paste(input$state,input$outcome)), data = newData()$value)
        hc
    })
}

shinyApp(ui = ui, server = server)

James Robinson
  • 241
  • 1
  • 3
  • 7
  • Heck out this answer: https://stackoverflow.com/questions/48346042/hyperlink-bar-chart-in-highcharter. Your events should run some `javascript` to change the page. You can't use `browseURL` because the parameters to `events=` are not lazily evaluated. They run once when the plot is built. The `JS()` changes that. – MrFlick Jul 06 '20 at 20:57
  • Thank you! I will try it out and see if I can fix it. – James Robinson Jul 06 '20 at 21:33

0 Answers0