1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
library(shiny)
library(plotly)
ui <- fluidPage(
plotlyOutput("p"),
tableOutput("table")
)
server <- function(input, output, session) {
# keep track of which cars have been hovered on
cars <- reactiveVal()
# On hover, the key field of the event data contains the car name
# Add that name to the set of all "selected" cars
observeEvent(event_data("plotly_hover"), {
car <- event_data("plotly_hover")$customdata
cars_old_new <- c(cars(), car)
cars(unique(cars_old_new))
})
# clear the set of cars when a double-click occurs
observeEvent(event_data("plotly_doubleclick"), {
cars(NULL)
})
output$p <- renderPlotly({
# if the car is selected, paint it red
cols <- ifelse(row.names(mtcars) %in% cars(), "red", "black")
mtcars %>%
plot_ly(
x = ~wt, y = ~mpg,
customdata = row.names(mtcars),
marker = list(color = cols)
) %>%
add_markers()
})
output$table <- renderTable({
filter(mtcars, row.names(mtcars) %in% cars())
})
}
shinyApp(ui, server)
|