Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to index traces with a continuous legend using both add_trace and plotlyproxyinvoke "add_trace" #2390

Open
kramerrs opened this issue Sep 6, 2024 · 0 comments

Comments

@kramerrs
Copy link

kramerrs commented Sep 6, 2024

I have a number of plots that I am trying to synchronize and draw a highlighted point on in response to a users search. This works fine except when they are in tabs. Plotly proxy can't add a trace to graph that is not yet drawn, and in Shiny there isn't a good way to trigger an event after the plot is drawn. Subsequently I have added a manual add_trace check to see if a search has found a point that needs to be highlighted. However, when I add a trace directly to the figure. The traces are added in different orders, I gather the legend is added after both traces are defined. It appears that a continuous legend gets added as a trace, after all traces are drawn. So in a different order than when invokeProxy.

So in scenario one when a plot has been drawn and I add a trace the new trace has an index of 2, however if I draw the plot then add it within the same render function the legend has an index of 2.

It's really difficult to generate a reproducible example here, as I have done a number of tests, and things are pretty confusing. For example, if I add a name variable. name= ~SERIAL_NUM then for some reason each point gets it's own trace index. However, this obliterates the hover text for some reason.

library(shiny)
library(plotly)

ui <- fluidPage(
  plotlyOutput("plot"),actionButton(label="add","addtrace"),actionButton(label="delete","deletetrace")
)




server <- function(input, output, session) {
   plotproxy <- plotlyProxy("plot", session=session, deferUntilFlush=FALSE)
 
  
  output$plot <- renderPlotly({
    a = seq(1,10,1)
    b = seq(100,1000,100)
    c = seq(1,4.9,0.4)
    
    data = tibble(a,b,c)
    data <- data %>% mutate(res = a+b+c)
    
    layout_details <- list(xaxis = list(title = 'a [-]'),
                           yaxis = list(title = 'b [-]'),
                           zaxis = list(title = 'c [-]'),
                           coloraxis=list(colorbar=list(title=list(text='Here are the results'))))
    
    p = plot_ly(data, x = ~a, y = ~b , color = ~res, type = 'scatter', 
                mode = 'markers', text = ~res, showlegend = FALSE, scene = 'scene1',hovertemplate = paste('<b><b>SERIAL_NUM</b>:  %{text}'))
    p
  })
  

  observeEvent(input$addtrace, {
    plotproxy%>%plotlyProxyInvoke("addTraces", list(list( 
      x =  list(2),
      y = list(2),
      type = 'scatter',
      mode = 'markers' ,
      marker = list(size = 10,
                    color = 'rgba(255, 18 , 19 , .9)',
                    line = list(color = 'rgba(0, 0, 0, .3)',
                                width = 3))
    )))
    
  
  
})
  observeEvent(input$deletetrace, {
    plotproxy%>%plotlyProxyInvoke("deleteTraces",2)
    
    
  })
}
shinyApp(ui, server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant