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!