[BUG]: forced minimum tick spacing (box/violin/candlestick/ohlc) leaks between figures on the same graph div
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 65/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- javascript
- Ambito
- data-visualization
Direzione di ricerca
Inizia esaminando Axes.minDtick e i punti di ingresso setConvert, ax.clearCalc e doCalcdata menzionati nell'issue. Riproduci la differenza tra Plotly.newPlot e Plotly.react con le figure box e scatter fornite, quindi verifica che la spaziatura dei tick forzata venga reimpostata tra le figure e che entrambi i percorsi producano gli stessi tick.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
Box, violin, candlestick and ohlc traces ask their position axis for a minimum tick spacing, so that each box gets a tick of its own rather than ticks at meaningless in-between positions. That forcing is silently lost whenever the figure is drawn into a graph div that already held a different figure — so Plotly.react, restyle, addTraces and friends can produce different ticks than Plotly.newPlot of the exact same figure.
It goes the other way too: a graph div that once held a box plot keeps the forced spacing after you react to a trace type that never asked for it.
Steps to reproduce
var boxFig = {
data: [{type: 'box', x: [1, 1, 2, 2, 3, 3], y: [1, 2, 3, 4, 5, 6]}],
layout: {width: 700, height: 400}
};
var scatterFig = {data: [{y: [1, 2, 3]}], layout: {width: 700, height: 400}};
// x ticks: 1, 2, 3 — correct, one per box
Plotly.newPlot(gd, boxFig);
// x ticks: 0.5, 1, 1.5, 2, 2.5, 3, 3.5 — same figure, half the ticks land between boxes
Plotly.newPlot(gd, scatterFig).then(function() { return Plotly.react(gd, boxFig); });
It is most visible on a date axis. Five daily candles at width: 1000, reached by reacting from a line chart over the same dates:
newPlot: Jan 1 | Jan 2 | Jan 3 | Jan 4 | Jan 5
react: 12:00 Dec 31, 2023 | 00:00 Jan 1, 2024 | 12:00 | 00:00 Jan 2, 2024 | 12:00 | ...
Every second tick falls in the gap between two candles, and the axis now starts on the day before the data.
Notes
Axes.minDtick keeps its state in ax._minDtick / ax._forceTick0, with three meanings: undefined (nothing forced yet — adopt this trace's spacing), a positive number (a forcing is in effect), and 0 (forcing cancelled — by non-grouped bars, or by scatter/heatmap calc — and sticky, so a later trace can't reinstate it).
The reset back to undefined between passes sits at the bottom of setConvert, but it can't take effect on a real axis: setConvert runs while supplyDefaults builds the new _fullLayout, where those keys don't exist yet, and relinkPrivateKeys then copies the old values back onto it. So whichever figure the graph div held first decides the forcing for every figure after it. newPlot escapes it only because it starts from an empty _fullLayout.
Found by a sweep comparing react against newPlot of the same figure — 7 of 12 divergences traced back here.
Fix proposed in #7950, which moves the reset into ax.clearCalc(), alongside the equivalent relink cleanup doCalcdata already does for shared color axes.
- Lingua principale
- JavaScript
- Stelle
- 18.3k
- Fork
- 2k
- Merge medio
- 2g 12h
- PR unite (30g)
- 28
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di plotly/plotly.js
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
chore P1 plotly-internal size: 1 task
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
-
chore P3 plotly-internal size: 1 task
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
bug infrastructure P2
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
Tutte le issue di plotly/plotly.js
Issue simili
-
code-quality refactoring
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
langchain-ai/deepagents#6450 ·
-
optimization optimization:agents-md-curator
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
githubnext/gh-aw-cao#13143 ·
-
status: needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100