我正在尝试制作一个闪亮的应用程序,用户可以在其中单击和双击各种对象来执行各种操作。点击工作正常,但我无法让双击工作。在这个希望简单、可重现的示例中,我无法打印双击的详细信息。
library(shiny)
library(plotly)
ui <- function(){
fluidPage(
plotlyOutput("plot2")
)
}
server <- function(input, output, session){
myPlotEventData2 <- reactive({
event_data(event = "plotly_doubleclick", source = "myPlotSource2")
})
myPlotEventData3 <- reactive({
event_data(event = "plotly_click", source = "myPlotSource2")
})
filtered_data1 <- reactive({
generation_types <- c("Solar", "Wind", "Hydro", "Nuclear")
MWh <- c(150, 200, 180, 250)
random_data <- data.frame(generation_type = generation_types, MWh = MWh)
})
output$plot2 <- renderPlotly({
a <- filtered_data1()
plot_ly(data = a, labels = ~generation_type, values = ~round(MWh),
ids = ~id,
type = "pie", sort = FALSE,
source = "myPlotSource2") %>%
layout(showlegend = FALSE, margin = list(l = 0, r = 0, t = 0, b = 0))
})
observe({
clicked_data <- myPlotEventData2()
if (!is.null(clicked_data)) {
clicked_segment <- clicked_data$pointNumber + 1
segment_label <- filtered_data1()$generation_type[clicked_segment]
segment_value <- filtered_data1()$MWh[clicked_segment]
print(paste("right segment:", segment_label))
print(paste("right value:", segment_value))
}
})
observe({
clicked_data <- myPlotEventData3()
if (!is.null(clicked_data)) {
clicked_segment <- clicked_data$pointNumber + 1
segment_label <- filtered_data1()$generation_type[clicked_segment]
segment_value <- filtered_data1()$MWh[clicked_segment]
print(paste("Clicked segment:", segment_label))
print(paste("Segment value:", segment_value))
}
})
}
shinyApp(ui, server)
这是预期的行为。
plotly_doubleclick
活动不提供任何event_data
。
请参阅章节17.2.6 事件优先级 此处:
有许多事件可以通过 event_data() 访问,但不能 包含任何信息(例如,“plotly_doublelick”、“plotly_deselect”、 “plotly_afterplot”等)。这些事件会自动给出 事件优先级,因为它们相应的闪亮输入值永远不会 变化。 “plotly_doublelick”等事件的一种常见用例 (在缩放或平移拖动模式下双击时触发)和 “plotly_deselect”(在选择模式下双击时触发)是 清除或重置累积的事件数据。