在交互式绘图中,event_data 保存所选数据。 使用下面的代码,可以通过双击绘图来重置 event_data
output$brush <- renderPrint({
d <- event_data("plotly_selected")
if (is.null(d)) "Click and drag events (i.e., select/lasso) appear here (double-click to clear)" else d
})
但是如何用闪亮的按钮重置 event_data 呢?
有解决办法吗?
如果绘图的
source
参数设置为 XXX
(默认为 A
),那么您必须将输入 plotly_selected-XXX
设置为 NULL
。这可以在 shinyjs
: 的帮助下完成
library(shiny)
library(plotly)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
actionButton("reset", "Reset"),
plotlyOutput("plot")
)
server <- function(input, output){
output[["plot"]] <- renderPlotly({
df <- data.frame(
x = c(1,2,1),
y = c(1,2,1)
)
df %>%
plot_ly(
x = ~x,
y = ~y,
source = "A",
type = 'scatter',
mode = 'markers',
marker = list(size = 20),
showlegend = FALSE
)
})
observeEvent(input[["reset"]], {
runjs("Shiny.setInputValue('plotly_selected-A', null);")
})
observe({ # just to test
print(event_data("plotly_selected", source = "A"))
})
}
shinyApp(ui, server)
您可以通过更换来做到这一点
runjs("Shiny.setInputValue('plotly_selected-A', null);")
与
runjs("Shiny.setInputValue('plotly_click-A', null);")
如果您使用
event_register()
注册可点击事件。
调整上面的代码
library(shiny)
library(plotly)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
actionButton("reset", "Reset"),
plotlyOutput("plot")
)
server <- function(input, output){
output[["plot"]] <- renderPlotly({
df <- data.frame(
x = c(1,2,1),
y = c(1,2,1)
)
df %>%
plot_ly(
x = ~x,
y = ~y,
source = "A",
type = 'scatter',
mode = 'markers',
marker = list(size = 20),
showlegend = FALSE
) %>%
plotly::event_register('plotly_click')
})
observeEvent(input[["reset"]], {
runjs("Shiny.setInputValue('plotly_selected-A', null);")
})
observe({ # just to test
print(event_data("plotly_selected", source = "A"))
})
}
shinyApp(ui, server)