나는 plot_ly
분산 플롯을 사용하여 반짝이는 앱을 만들고 있습니다. 크로스 토크 패키지의 SharedData
객체를 사용하여 플롯과 datatable
(DT의 정보)간에 정보를 공유합니다.R의 시각적 응답 사용 안 함 클릭 이벤트
문제는 플롯에서 한 점을 클릭하면 다른 모든 점의 색이 희미 해지고 선택한 점에 대한 범례에 항목이 추가되고 문제가 발생하면 그 점이 보이지 않습니다 그것을 취소하십시오. 이 시각적 인 변경 사항을 비활성화하고 싶지만 여전히 플롯 클릭을 감지 할 수 있습니다.
난 그냥 plot_ly
전화의 데이터 매개 변수에 SharedData
객체 대신 반응성 data.frame
를 사용하는 경우이 문제가 발생하지 않습니다,하지만 플롯에서 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)
첫 번째 해결책은 실제로 잘 작동하지 않지만 두 번째 방법은 적어도 SharedData 객체 대신 'data.frame'을 사용하여 해결 방법을 제시합니다. 이것은 제가 처음으로 현상금을 제안한 것이므로 여기에 약간의 프로토콜이 확실하지 않습니다. 나는 SO 메타를 검사 할 필요가 있을지 모르지만, 지금은 현상금을 수여 하겠지만, 여전히'SharedData' 객체의 사용을 허용하고 해결 방법보다는 플롯 클릭에 대한 시각적 응답을 비활성화하는 해결책을 고수하고 있습니다. . 고맙습니다! –
감사! 코드에 대해 좀 더 연구하고 나중에 더 나은 대답을 찾으면 나중에 업데이트하려고 노력할 것입니다. –