Hola, uso este código para obtener mi línea con un punto para cada mes.
Ahora me gustaría obtener automáticamente una serie para cada año. ¿Cuál es la mejor manera de hacerlo?
function Dimension() { return Data.ndx.dimension(function (d) { return moment.localeData()._months[d["DATE"].getMonth()]; }); } function Group(thisDim) { var thisVal = thisDim.group().reduceSum(function (d) { return d["VALUE"]; }); return thisVal; } var thisDim = Dimension(); var thisVal = Group(); chartObject.dimension(thisDim).group(thisVal) .title(function (d) { return d.key; }) .label(function (d) { return d.key;}) .margins({top: 10, right: 10, bottom: 30, left: 70}) .elasticY(true) ; chartObject.x(d3.scaleBand().range([0,11])).xUnits(dc.units.ordinal); chartObject.xAxis().tickFormat(function(d) { return moment.localeData()._months[d]; });Probablemente lo más fácil de hacer es usar el gráfico de series . El gráfico de serie es un atajo para un gráfico compuesto que divide los datos en función de partes de la clave y genera automáticamente un gráfico (línea) para cada valor de acceso de serie.
Requerirá que use una "multiclave" para su dimensión, con año y mes. Utilizará seriesAccessor y keyAccessor para indicarle a dc.js cómo desarmar las teclas múltiples.
Por cierto, la forma en que manejas los meses es más complicada de lo que debería ser. Ahora mismo estás creando la dimensión con nombres de meses como claves.
moment.localeData()._months[d["DATE"].getMonth()]Luego, su escala vuelve a convertir esos nombres en números:
.x(d3.scaleBand().range([0,11]))En su lugar, sugeriría usar el número de año y mes para su tecla múltiple:
return Data.ndx.dimension(d => ([d.DATE.getYear(), d.DATE.getMonth()]));Luego, el resto debe seguir el ejemplo vinculado anteriormente ... pero comente si tiene problemas, ya que estoy omitiendo algunos detalles.