पर क्लिक करें मैं plot_ly
स्कैटर प्लॉट के साथ एक चमकदार ऐप बना रहा हूं। मैं प्लॉट और datatable
(डीटी से) के बीच जानकारी साझा करने के लिए SharedData
ऑब्जेक्ट (क्रॉसस्टॉक पैकेज से) का उपयोग कर रहा हूं।आर प्लॉटली की घटनाओं की प्रतिक्रिया को अक्षम करें
समस्या तब होती है जब आप साजिश में किसी बिंदु पर क्लिक करते हैं, यह अन्य सभी बिंदुओं का रंग मंद करता है और चयनित बिंदु के लिए किंवदंती में प्रवेश जोड़ता है, और एक बार ऐसा होता है तो ऐसा कोई प्रतीत नहीं होता है इसे पूर्ववत करने के लिए। मैं इन दृश्य परिवर्तनों को अक्षम करना चाहता हूं लेकिन अभी भी साजिश क्लिक का पता लगाने में सक्षम हूं।
यह समस्या नहीं होती है, तो मैं सिर्फ एक प्रतिक्रियाशील data.frame
बजाय एक SharedData
वस्तु की plot_ly
कॉल का डेटा पैरामीटर में उपयोग करते हैं, लेकिन फिर 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'। यह मेरा पहला उपहार है इसलिए मैं यहां प्रोटोकॉल का थोड़ा अनिश्चित हूं। मुझे एसओ मेटा की जांच करने की आवश्यकता हो सकती है, लेकिन अभी के लिए मैं बक्षीस का पुरस्कार दूंगा लेकिन फिर भी उस उत्तर के लिए बाहर रहूंगा जो सीधे 'साझाडेटा' ऑब्जेक्ट के उपयोग की इजाजत देता है और केवल कामकाज की बजाय साजिश क्लिक की दृश्य प्रतिक्रिया को अक्षम करता है । धन्यवाद! –
धन्यवाद! मैं कोड पर कुछ और काम करने की कोशिश करूंगा और बाद में इसे अपडेट करूँगा अगर मुझे बेहतर जवाब मिल जाए। –