问题
I wish to use the values of a clicked point for further processing but am unclear how to reference the data
library(shiny)
library(ggvis)
library(dplyr)
df <- data.frame(a=c(1,2),b=c(5,3))
runApp(list(
ui = bootstrapPage(
ggvisOutput("plot")
),
server = function(..., session) {
# function to handle click
getData = function(data,location,session){
if(is.null(data)) return(NULL)
# This returns values to console
print(glimpse(data))
# Observations: 1
# Variables:
# $ a (int) 2
# $ b (int) 3
}
# create plot
df %>%
ggvis(~a, ~b) %>%
layer_points() %>%
handle_click(getData) %>%
bind_shiny("plot")
# further processing
clickedData <- reactive({
# how do I reference the value 'a' e.g. 2 of the clicked point'
})
}
))
TIA
回答1:
Here's a working solution that just prints out the data.frame. You're close.
df <- data.frame(a = 1:5, b = 101:105)
runApp(shinyApp(
ui = fluidPage(
ggvisOutput("ggvis")
),
server = function(input, output, session) {
clickFunc <- function(data, location, session) {
cat(str(data))
}
df %>%
ggvis(~ a, ~b) %>%
layer_points %>%
handle_click(clickFunc) %>%
bind_shiny("ggvis")
}
))
EDIT:
(disclaimer: I never used ggvis in shiny until 5 minutes ago so maybe this isn't the correct way, but this works)
Here's how to use the data in your UI
df <- data.frame(a = 1:5, b = 101:105)
runApp(shinyApp(
ui = fluidPage(
div("a:", textOutput("aVal", inline = TRUE)),
div("b:", textOutput("bVal", inline = TRUE)),
ggvisOutput("ggvis")
),
server = function(input, output, session) {
clickFunc <- function(data, location, session) {
session$output$aVal <- renderText({ data$a })
session$output$bVal <- renderText({ data$b })
}
df %>%
ggvis(~ a, ~b) %>%
layer_points %>%
handle_click(clickFunc) %>%
bind_shiny("ggvis")
}
))
来源:https://stackoverflow.com/questions/30536486/how-do-i-reference-a-clicked-point-on-a-ggvis-plot-in-shiny