I'm using the wonderful proxy options of plotly in shiny, and I'm having trouble with restyling the size of the markers:
When I want to resize the markers proxy plotly changes the color of the markers for multiple traces. The weird thing is that it happens when the variable is an integer, but when I tried to do the same thing with a double it worked fine!
I made a reprex, this shiny app includes both cases:
library(plotly)
#> Loading required package: ggplot2
#>
#> Attaching package: 'plotly'
#> The following object is masked from 'package:ggplot2':
#>
#> last_plot
#> The following object is masked from 'package:stats':
#>
#> filter
#> The following object is masked from 'package:graphics':
#>
#> layout
library(ggplot2)
library(shiny)
set.seed(123)
vec1 <- rnorm(5)
vec2 <- rnorm(5)
x_int <- 1:5
x_dbl <- runif(5)
dat <- data.frame(y = c(vec1, vec2), x_int = rep(x_int, 2), x_dbl = rep(x_dbl, 2), cat = c(rep("vec1", 5), rep("vec2", 5)))
pltly_int <- ggplotly(
dat %>%
ggplot(aes(x = x_int, y = y, group = cat, color = cat)) +
geom_point() +
geom_line() +
theme_bw() +
scale_color_manual(values = c("yellow", "red"))
)
pltly_dbl <- ggplotly(
dat %>%
ggplot(aes(x = x_dbl, y = y, group = cat, color = cat)) +
geom_point() +
geom_line() +
theme_bw() +
scale_color_manual(values = c("yellow", "red"))
)
ui <- fluidPage(
titlePanel("Just a RepRex"),
sidebarLayout(
sidebarPanel(
sliderInput("Numbers",
"Choose a Number",
min = 1,
max = 5,
value = 1
)
),
mainPanel(
plotlyOutput("int_plot", height = "200px"),
plotlyOutput("dbl_plot", height = "200px")
)
)
)
server <- function(input, output, session) {
output$int_plot <- plotly::renderPlotly({
pltly_int
})
output$dbl_plot <- plotly::renderPlotly({
pltly_dbl
})
observe({
idx <- input$Numbers
size <- rep(5, 5)
size[idx] <- 10
plotly::plotlyProxy("int_plot", session) %>%
plotly::plotlyProxyInvoke("restyle", list(marker = list(size = size)))
plotly::plotlyProxy("dbl_plot", session) %>%
plotly::plotlyProxyInvoke("restyle", list(marker = list(size = size)))
})
}
shinyApp(ui = ui, server = server)