Estoy construyendo un diagrama de barras en d3.js en el que cada barra representa el total de casos de TB durante un mes. Los datos consisten esencialmente en una fecha (inicialmente cadenas en formato% Y-% m, pero analizada usando d3.time.format.parse) y un entero. Me gustaría que las etiquetas de los ejes fueran relativamente flexibles (mostrar solo los límites de los años, la etiqueta cada mes, etc.), pero también me gustaría que las barras estén espaciadas uniformemente.d3.js - barras espaciadas uniformemente en una escala de tiempo
puedo conseguir el etiquetado eje flexible cuando utilizo una escala fecha:
var xScaleDate = d3.time.scale()
.domain(d3.extent(thisstat, function(d) { return d.date; }))
.range([0, width - margin.left - margin.right]);
... pero las barras no son iguales de tiempo debido a un número variable de días de cada mes (por ejemplo, febrero y marzo están notablemente más juntos que otros meses). Puedo conseguir barras separadas uniformemente usando una escala lineal:
var xScaleLinear = d3.scale.linear()
.domain([0, thisstat.length])
.range([0, width - margin.left - margin.right]);
... pero no puedo encontrar la manera de continuación, tienen etiquetas de los ejes basados en fechas. Intenté usar ambas escalas simultáneamente y solo generar un eje del xScaleDate
, solo para ver qué pasaría, pero las escalas naturalmente no se alinean del todo bien.
¿Hay una manera directa de lograr esto que me falta?
parece que el problema es que D3 es la creación xpos de la marca de tiempo real. ¿Qué tal calcular 'data.monthsFromJan2000' o similar y usar eso como su entrada de datos para xpos? De esa manera estarán espaciados de manera uniforme. También puede almacenar 'data.year' y' data.month' con fines de etiquetado. – Plato