Plotly Scatter Plot with Size Assigned to a Variable in R

Plotly Scatter Plot with Size Assigned to a Variable in R

Halo,

Saya ingin membahas masalah yang saya hadapi saat menggunakan Plotly untuk membuat scatter plot dengan ukuran point yang dijadikan variable. Masalah ini timbul ketika data memiliki lebih dari 10,000 titik, dan browser Chrome atau Edge akan mengalami crash.

Latar Belakang

Saya telah membuat aplikasi Shiny yang menggunakan Plotly untuk membuat scatter plot dengan ukuran point yang dijadikan variable. Aplikasi ini bertujuan untuk menunjukkan tren data namun juga memungkinkan pengguna untuk melakukan filtering pada data. Namun, saat saya mencoba mengembalikan aplikasi ke browser Chrome atau Edge, browser tersebut akan mengalami crash dan saya harus menggunakan Task Manager untuk menutup aplikasi.

Masalah

Saya telah posting topik ini di Plotly Community site dan meminta bantuan dari komunitas. Saya juga ingin tahu apakah masalah ini termasuk dalam expectation normal untuk data set yang besar seperti itu, ataukah ada solusi lain yang dapat menyelesaikan masalah ini.

Kode

Berikut adalah kode R yang saya gunakan:

library(shiny)
library(plotly)
library(tidyverse)

data_set <- tibble(xvar = runif(50000), yvar = runif(50000), sizevar = runif(50000)) %>% 
 mutate(size_var_num = case_when(
 sizevar < .2 ~ 5,
 sizevar < .4 ~ 10,
 sizevar < .6 ~ 15,
 sizevar < .8 ~ 20,
 TRUE ~ 25
 ))

ui <- fluidPage(
 headerPanel('Example'),
 sidebarPanel(shinyWidgets::noUiSliderInput(
 inputId = "xvar_slider",
 label = "xvar slider : ",
 behaviour = "drag",
 min = 0,
 max = 1,
 value = c(0,100),
 step = .001,
 color = "#3c8dbc"
 )),
 mainPanel(
 plotlyOutput('plot')
 )
)

server <- function(input, output) {
 
 data <- reactive({
 
 data_set %>% 
 filter(xvar >= input$xvar_slider[1] & xvar <= input$xvar_slider[2]) %>% 
 mutate(label = paste0("xvar: ", xvar, "\nyvar: ", yvar, "\nxvar percent: ", round(xvar,2)*100, 
 "%\nyvar dollar: $", format(yvar*100000, big.mark=",")))

 })
 
 output$plot <- renderPlotly(
 
 data() %>% 
 plot_ly(
 x = ~xvar,
 y = ~yvar, 
 marker = list(size = ~size_var_num), #, sizemode = 'diameter', sizeref = 2.5
 opacity = 1,
 type = 'scatter',
 mode = 'markers',
 hoverinfo = 'text',
 hovertext = ~label)
 )
 
}

shinyApp(ui,server)

Solusi

Saya telah mencoba beberapa solusi, seperti:

  • Mengurangi jumlah data dengan cara filter atau sampling
  • Meningkatkan performa Plotly dengan menggunakan opsi plot_ly yang lebih cepat
  • Menggunakan browser lain selain Chrome dan Edge

Namun, saya masih belum menemukan solusi yang efektif untuk mengatasi masalah ini. Saya berharap bahwa komunitas R/Plotly dapat membantu saya menyelesaikan masalah ini.

Terima kasih!

Leave a comment