gpt4 book ai didi

r - 两次单击相同的绘图标记不会触发事件两次

转载 作者:行者123 更新时间:2023-12-01 11:20:26 25 4
gpt4 key购买 nike

我正在使用 Plotly 的 event_data("plotly_click")在用户单击散点图中的标记后执行操作(打开模态)。之后(例如关闭模态),event_data("plotly_click")当然不会改变,因此点击相同的标记不会再次触发相同的 Action 。

最小的例子:

library(plotly)
ui <- fluidPage(
plotlyOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlotly({
mtcars %>% plot_ly(x=~disp, y=~cyl)
})

# Do stuff after clicking on a marker in the plot
observeEvent(event_data("plotly_click"), {
print("do some stuff now") # this is not executed after second click on same marker
})
}
shinyApp(ui, server)

我已经尝试过使用 Shinyjs 的解决方法 onclick , 无济于事(它在绘图的空白区域运行良好,但在单击标记时不起作用):
shinyjs::onclick(id="plot", print("clicked"))

我还尝试使用存储最后一次点击并在之后立即重置的 react 值(例如通过 event_data("plotly_hover") ),但所有尝试都失败了,因为 event_data("plotly_click")保持其旧值。

任何人都可以帮忙吗?

最佳答案

[编辑:该问题已在 Plotly 4.9.0 中修复。查看答案 below .此答案适用于 Plotly 4.8.0。从 plotly 4.9.0.,删除字符串 .clientValue-从源代码或使用 below answer .]

我终于解决了这个问题。我知道这让一些人感到困扰,所以我会在这里发布我的解决方案:

基本上我使用 shinyjs包以重置有关特定事件(在我的情况下为按钮)的最后一次点击的数据(event_data("plotly_click") 从中获取其信息的来源)。

该函数的定义是(请注意,如果使用“A”,则需要将其替换为 plotly-source 字符串):

extendShinyjs(text = "shinyjs.resetClick = function() { Shiny.onInputChange('.clientValue-plotly_click-A', 'null'); }")

然后在按钮单击时调用 js$resetClick() .

最小的例子:
library(shiny)
library(plotly)
library(shinyjs)

ui <- shinyUI(
fluidPage(
useShinyjs(),
# code to reset plotlys event_data("plotly_click", source="A") to NULL -> executed upon action button click
# note that "A" needs to be replaced with plotly source string if used
extendShinyjs(text = "shinyjs.resetClick = function() { Shiny.onInputChange('.clientValue-plotly_click-A', 'null'); }"),
actionButton("reset", "Reset plotly click value"),
plotlyOutput("plot"),
verbatimTextOutput("clickevent")
)
)


server <- shinyServer(function(input, output) {

output$plot <- renderPlotly({
plot_ly(mtcars, x=~cyl, y=~mpg)
})

output$clickevent <- renderPrint({
event_data("plotly_click")
})

observeEvent(input$reset, {
js$resetClick()
})
})

shinyApp(ui, server)

enter image description here

关于r - 两次单击相同的绘图标记不会触发事件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44412382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com