7
我建立一个闪亮的应用与plot_ly
散点图。我使用的是SharedData
对象(从串扰包)共享的情节和datatable
(从DT)之间的信息。禁用视觉反应Plotly单击事件
问题是,当您单击绘图中的一个点时,它会使所有其他点的颜色变暗,并为选定点的图例添加一个条目,一旦发生这种情况,似乎没有办法撤消它。我想禁用这些视觉变化,但仍然能够检测图点击。
,如果我只是在plot_ly
调用的数据参数使用反应data.frame
而不是SharedData
对象不会发生此问题,但随后从情节event_data
没有足够的信息在datatable
选择一行。 (该x
和y
点坐标是浮点数字,通过对数据坐标,以便匹配可以有意想不到的效果)
下面是一个使用演示mtcars
:
library(shiny)
library(DT)
library(plotly)
library(data.table)
library(crosstalk)
### UI function ---------
ui <- fluidPage(
fluidRow(
plotlyOutput('my_graph', height = '400px')
),
fluidRow(
dataTableOutput('my_table')
)
)
### Server function -------
server <- function(input, output, session) {
### SharedData object ----
filtered_data <- reactive({
data.table(mtcars, keep.rownames = TRUE)
})
shared_data <- reactive({
req(filtered_data())
SharedData$new(filtered_data(), ~rn)
})
### my_graph ----
output$my_graph <- renderPlotly({
p <- plot_ly(shared_data(),
x = ~disp,
y = ~mpg,
color = ~factor(carb),
source = 'm')
p
})
### my_table ---------
output$my_table <- renderDataTable({
datatable(shared_data()$data(),
selection = 'single')
})
observe({
click_detect = plotly::event_data('plotly_hover', source = 'm')
str(click_detect)
dataTableProxy('my_table') %>%
selectRows(match(click_detect$key, shared_data()$data()$rn))
})
}
shinyApp(ui, server)
第一个解决方案并没有真正的工作这么好,但第二次使用接近,至少作为一种解决方法了'data.frame'而不是'SharedData'对象。这是我的第一个赏金提议,所以我对这里的协议有点不确定。我可能需要检查SO元,但现在我会奖励赏金,但仍然支持直接解决允许使用'SharedData'对象的答案,并且仅禁用图形点击的视觉响应,而不是解决方法。谢谢! –
谢谢!我会尝试更多地处理代码,稍后如果我找到更好的答案,请更新它。 –