Tengo un conjunto de datos Estoy graficando con d3.js. El eje x representa el tiempo (en minutos). Me gustaría mostrar este eje en un formato hh:mm
, y no puedo encontrar una manera de hacerlo limpiamente en d3.¿Cómo puedo crear un formateador de ejes personalizado para horas y minutos en d3.js?
Mi código eje se ve así:
svg.append('g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + height + ')')
.call(d3.svg.axis()
.scale(x)
.orient('bottom'));
que genera etiquetas en minutos que se parece a [100, 115, 130, 140]
, etc.
Mi solución actual es seleccionar los elementos text
después de que hayan sido generados y anularlos con una función:
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;
});
Este eje de salidas ticks como [1:40, 1:55, 2:10]
, etc.
Pero esto parece janky y evita el uso de d3.format
. ¿Hay una mejor manera de hacer estas etiquetas?
supongo que debería haber mencionado, mi caso de uso es un histograma (con los objetos que representan el tiempo agrupadas). Como estoy bastante seguro de que esto establece una escala ordinal, no he podido hacer que esto funcione. Tal vez solo estoy mezclando conceptos incompatibles? Aquí está mi código (eje en la parte inferior): http://pastebin.com/Wkcexcgr – matthewsteele
Edité mi respuesta y agregué un ejemplo que muestra cómo usar la segunda técnica junto con un histograma de duraciones. – mbostock
Esto lo hizo. ¡Gracias por toda tu ayuda! Realmente sorprendido de lo que has construido. – matthewsteele