olayları plot_ly
dağılım grafiği ile Parlak bir uygulama yapıyorum. Ben arsa ve datatable
(DT) arasında bilgi paylaşmak için bir SharedData
nesnesi (crosstalk paketinden) kullanıyorum.R Çizgisel tıklatma olaylarının görsel yanıtını devre dışı bırakın
Sorun, çizimdeki bir noktayı tıklattığınızda, diğer tüm noktaların rengini karartır ve seçilen noktaya efsaneye bir giriş ekler ve bu gerçekleşirse bir yol görünmez. geri almak için. Bu görsel değişiklikleri devre dışı bırakmak istiyorum ama yine de komplo tıklamalarını tespit edebiliyorum.
Sadece plot_ly
çağrısının veri parametresinde bir SharedData
nesnenin yerine reaktif data.frame
kullanırsanız bu sorun oluşmaz, ama sonra arsadan event_data
datatable
bir satır seçmek için yeterli bilgiye sahip değil . (. x
ve y
nokta koordinatları beklenmeyen sonuçlar edebilmek için bu veri karşı koordinatlara göre eşleştirme, nokta sayısal yüzen) İşte
demo mtcars
kullanıyor: olur Neden
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)
İlk çözüm gerçekten çok iyi çalışmıyor, ancak ikinci en azından bir "SharedData" nesnesi yerine bir "data.frame" kullanılarak bir geçici çözüm olarak yaklaşıyor. Bu benim ilk lütuf teklifimdir, bu yüzden burada protokolden biraz emin değilim. SO meta'lerini kontrol etmem gerekebilir, ancak şu an için ödül vereceğim ama yine de 'SharedData' nesnesinin kullanımına izin veren adresleri doğrudan yanıtlayan ve çözümün görsel cevabını devre dışı bırakan bir cevap için beklemeye devam ediyorum. . Teşekkür ederim! –
Teşekkürler! Daha iyi bir cevap bulursam kod üzerinde biraz daha çalışmaya çalışacağım ve daha sonra güncelleyeceğim. –