Esiste la possibilità di limitare il numero di etichette integer d3.svg.axis visualizzate sul grafico? Prendi ad esempio questo grafico. Ci sono solo 5 taglie qui: [0, 1, 2, 3, 4]
. Tuttavia, i segni di spunta vengono visualizzati anche per .5, 1.5, 2.5
e 3.5
.Come limitare d3.svg.axis alle etichette intero?
risposta
Si dovrebbe essere in grado di utilizzare d3.format
invece di scrivere il proprio funzione di formattazione per questo.
d3.svg.axis()
.tickFormat(d3.format("d"));
È inoltre possibile utilizzare tickFormat
sulla scala che l'asse utilizzerà automaticamente per impostazione predefinita.
ho capito che è sufficiente per nascondere questi valori, piuttosto che ad escludere del tutto. Questo può essere fatto utilizzando la tickFormat
(https://github.com/mbostock/d3/wiki/Formatting#wiki-d3_format) in quanto tale:
d3.svg.axis()
.tickFormat(function(e){
if(Math.floor(e) != e)
{
return;
}
return e;
});
L'utilizzo di d3.format("d")
come tickFormat potrebbe non funzionare in tutti gli scenari (see this bug). Sui dispositivi Windows Phone (e probabilmente su altri) i calcoli imprecisi possono portare a situazioni in cui le zecche non vengono rilevate correttamente come numeri interi, i. e. un segno di spunta di "3" può essere memorizzato internamente come 2.9999999999997 che per d3.format("d")
non è un numero intero.
Come risultato l'asse non viene visualizzato affatto. Questo comportamento diventa particolarmente evidente negli intervalli di battito fino a 10.
Una soluzione possibile è tollerare l'errore della macchina specificando un valore epsilon. I valori non devono essere interi esatte in questo modo, ma potrebbero differire dal prossimo numero intero fino alla gamma Epsilon (che dovrebbe essere il modo più basso del vostro errore nei dati):
var epsilon = Math.pow(10,-7);
var axis = d3.svg.axis().tickFormat(function(d) {
if (((d - Math.floor(d)) > epsilon) && ((Math.ceil(d) -d) > epsilon))
return;
return d;
}
Un'altra soluzione, che viene anche menzionato in altri thread, è quello di specificare un numero fisso di zecche e quindi arrotondare i tick (che ora dovrebbero essere "quasi" interi) all'intero più vicino. È necessario conoscere il valore massimo dei dati affinché questo funzioni:
var axis = d3.svg.axis().ticks(dataMax).tickFormat(d3.format(".0f"))
- 1. d3 etichette tick sovrapposte autospaziale
- 2. Come limitare l'accesso alle cartelle in asp.net
- 3. Come posso aggiungere etichette alle immagini TensorBoard?
- 4. Come aggiungere espressioni alle etichette in facet_wrap?
- 5. Aggiungere etichette a D3 Schema di accordo
- 6. Etichette ad alta risoluzione che si sovrappongono alle etichette
- 7. D3 logaritmica Spuntare Etichette come potenza di 10
- 8. Come aggiungere etichette ai bordi nel grafico d3
- 9. Aggiungere unità alle etichette Yaxis in MatPlotLib
- 10. relativo alle date sull'asse d3.js
- 11. ovviare alle carenze delle serie D3 nidificazione
- 12. Matplotlib: Come forzare le etichette di graduazione del numero intero?
- 13. Imposta etichette personalizzate sull'asse x nei grafici a barre d3?
- 14. Multi-livello/raggruppamento delle etichette degli assi con d3
- 15. Posizionamento delle etichette al centro dei nodi in d3.js
- 16. Etichette di testo asse grafico a linee D3 in linea multipla
- 17. Oscillazione: spaziatura casella di controllo rispetto alle etichette
- 18. È possibile limitare gli attributi alla classe o alle proprietà?
- 19. Come aggiungo etichette al grafico a bolle di forza d3.js
- 20. Le etichette degli assi D3 diventano troppo granulose quando si ingrandisce
- 21. posizione c3js delle etichette dati
- 22. d3.js: come aggiungere etichette per disperdere i punti sul grafico
- 23. div schermo intero che si adatta alle dimensioni del browser
- 24. d3.scale.linear() vs d3.scaleLinear()
- 25. Come limitare JSpinner
- 26. Come limitare l'accesso JSON?
- 27. Come posso limitare Parallel.ForEach?
- 28. Elementi SVG ridimensionabili con JavaScript e D3
- 29. etichettatura dell'asse d3
- 30. Come limitare la larghezza e l'altezza massime alle dimensioni dello schermo in CSS?
Utile. C'è un modo per far cadere anche i segni di graduazione? Il formato nasconde i mezzi numeri, ma mantiene i segni di mezzo segno di spunta. – IBBoard
@IBBoard prova qualcosa del tipo: 'axis.ticks (tickCountSetter (yMax))' dove yMax è un numero, usando questa funzione: 'function tickCountSetter (n) {if (n <= 2) {return n} else {return 10}} ' – s2t2