Ho un set di dati che sto visualizzando con d3.js. L'asse x rappresenta il tempo (in minuti). Mi piacerebbe visualizzare questo asse in un formato hh:mm
e non riesco a trovare un modo per farlo in modo pulito all'interno di d3.Come si crea un formattatore di assi personalizzato per ore e minuti in d3.js?
Il mio codice asse assomiglia:
svg.append('g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + height + ')')
.call(d3.svg.axis()
.scale(x)
.orient('bottom'));
che genera etichette in minuti che assomiglia [100, 115, 130, 140]
, ecc
La mia soluzione attuale è quella di selezionare gli elementi text
dopo che sono stati generati e sostituiscile con una funzione:
svg.selectAll('.x.axis text')
.text(function(d) {
d = d.toFixed();
var hours = Math.floor(d/60);
var minutes = pad((d % 60), 2);
return hours + ":" + minutes;
});
Questo asse di uscite segni di spunta come [1:40, 1:55, 2:10]
, ecc.
Ma questo si sente janky ed evita l'uso di d3.format
. C'è un modo migliore per fare queste etichette?
Suppongo Avrei detto, il mio caso d'uso è un istogramma (con gli oggetti che rappresentano cestinate tempo). Siccome sono abbastanza sicuro che questo ha impostato una scala ordinale, non sono stato in grado di farlo funzionare. Forse sto solo mescolando concetti incompatibili? Ecco il mio codice (asse in basso): http://pastebin.com/Wkcexcgr – matthewsteele
Ho modificato la mia risposta e aggiunto un esempio che mostra come utilizzare la seconda tecnica in combinazione con un istogramma di durate. – mbostock
Questo ha funzionato. Grazie per tutto il vostro aiuto! Davvero stupito di ciò che hai costruito. – matthewsteele