HTML documents including plotly plots are not reproducible
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 believe it is known that the value of plotly::plot_ly(x = 1, y = 1)$x$cur_data is hard to reproduce, compare https://github.com/plotly/plotly.R/issues/1048. Some work has been done in #1379 towards use in shinytest at least.
I am also using shinytest, but in my app, users are downloading HTML files with plotly plots generated using rmarkdown::render(). So these files are still non-reproducible because I cannot seem to use renderPlotly() inside rmarkdown::render(). To see the problem:
bug.Rmd:
---
output: html_document
---
```{r}
plotly::plot_ly(x = 1, y = 1)
```
Then run R -q -s -e 'rmarkdown::render("bug.Rmd")' and see the value of cur_data in bug.html change every time you regenerate it.
I see two options:
- I could replicate the logic of
https://github.com/plotly/plotly.R/blob/bab01af316673e35d8314129178bfb27eed27fe7/R/shiny.R#L46-L53
inside bug.Rmd, like this:
However, this breaks the plot. Any way I can make this work?p <- plotly::plot_ly(x = 1, y = 1) p$x$attrs <- NULL # and a few more p - I have also tried putting this inside
bug.Rmd:
butshiny::snapshotPreprocessOutput( plotly::plot_ly(x = 1, y = 1), function(value) { # https://github.com/plotly/plotly.R/blob/3d49fbc5897703d58b/R/shiny.R#L68 json <- jsonlite::from_JSON(value) json$x <- json$x[setdiff(names(json$x), c("visdat", "cur_data", "attrs"))] # https://github.com/plotly/plotly.R/blob/3d49fbc589/R/utils.R#L1020-L1025 jsonlite::toJSON(json, digits = 50, auto_unbox = TRUE, force = TRUE, null = "null", na = "null", time_format = "%Y-%m-%d %H:%M:%OS6" ) } )rmarkdown::render()seemed to ignore it, even insideshinytest(or did I do anything wrong there)? - One could amend #1365 to take into account a hash of the current plot serialization to avoid generating identical IDs even if the external seed is reset to the same values externally. This would avoid the need for
tempfile().
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
Reproduziere das Problem mit bug.Rmd und R -q -s -e 'rmarkdown::render("bug.Rmd")', und vergleiche anschließend den Wert von cur_data in bug.html über mehrere Render-Vorgänge hinweg. Lies die referenzierte Logik in R/shiny.R und R/utils.R sowie die zugehörigen Issues #1048, #1379 und #1365. Als erledigt gilt, wenn mit rmarkdown::render() gerenderte HTML-Dokumente reproduzierbare Plotdaten erzeugen, ohne den Plot zu beschädigen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript, r
- Bereich
- data-visualization, web-dev
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100