如何用闪亮的按钮重置event_data?

问题描述 投票:0回答:2

在交互式绘图中,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 呢?

有解决办法吗?

r shiny r-plotly
2个回答
1
投票

如果绘图的

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)

0
投票

您可以通过更换来做到这一点

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)
© www.soinside.com 2019 - 2024. All rights reserved.