r-如何从ggplotly图表中获取选定的事件数据



我知道https://plot.ly/r/shinyapp-plotly-events/并一直将其作为指南。但是我要转换为plotly的ggplot元素是factoextra包的fviz_dend函数的输出。下面是我正在使用的一个最小的闪亮应用程序示例:

library(factoextra)
library(plotly)
library(shiny)
library(DT)
ui <- fluidPage(
plotlyOutput("ggp"),
verbatimTextOutput("selected_points"),
DT::dataTableOutput("filtered_table")
)
server <- function(input, output, session) {
## ggplot output
fviz <- fviz_dend(
x                 = hclust(dist(mtcars)),
k                 = 5,
show_labels       = TRUE,
type              = "phylogenic",
phylo_layout      = "layout_as_tree",
color_labels_by_k = TRUE,
palette           = "igv"
)
## convert to ggplotly
ggfviz <- ggplotly(fviz)
## add keys
for (i in seq(7, 11)) {
ggfviz[["x"]][["data"]][[i-5]][["key"]] <-
as.character(ggfviz[["x"]][["data"]][[i]][["text"]])
}
output$ggp <- renderPlotly({
ggfviz
})
output$selected_points <- renderPrint({
event_data("plotly_selected")[5]
})
output$filtered_table <- DT::renderDataTable(
mtcars[which(rownames(mtcars) == event_data("plotly_selected")[5]), ],
)
}
shinyApp(ui, server)

因此,我尝试使用event_data("plotly_selected")[5]访问的key来过滤数据表,虽然event_data("plotly_selected")[5]确实显示了每个output$selected_points的密钥,但不知何故,它没有传递给数据表过滤器。

看起来event_data将返回一个包含多行的数据帧。您不需要使用==进行过滤,而是需要%in%来查看plotly_selected的多个可能选择中包含哪些多辆车。此外,即使您按第5列进行子集设置,您仍然有一个数据帧,并且需要包括仅用于过滤的列key(包含汽车矢量(。这应该有效:

mtcars[which(rownames(mtcars) %in% event_data("plotly_selected")$key), ]

mtcars[which(rownames(mtcars) %in% event_data("plotly_selected")[["key"]]), ]

相关内容

  • 没有找到相关文章