Unable to index traces with a continuous legend using both add_trace and plotlyproxyinvoke "add_trace"
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- R
- Sterne
- 2.7k
- Forks
- 641
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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)
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit dem bereitgestellten Shiny-Beispiel unter Verwendung von renderPlotly, plotlyProxyInvoke("addTraces") und deleteTraces, und vergleichen Sie die Reihenfolge der Traces, wenn die kontinuierliche Legende während des Renderns gegenüber danach erstellt wird. Reproduzieren Sie die unterschiedlichen Indizes und überprüfen Sie, dass das Hinzufügen und Löschen des hervorgehobenen Traces konsistent auf den vorgesehenen Trace abzielt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript, r
- Bereich
- data-visualization
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 28/100