Установка ширины столбчатой ​​диаграммы в месячные интервалы - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь создать гистограмму, используя dc.js для отображения количества сообщений, агрегированных по месяцам.Я настроил измерение и группу перекрестного фильтра для правильной агрегации данных, но я не могу получить ширину полученной диаграммы, чтобы заполнить правильную ширину по оси X.

Мой (упрощенный) код выглядит следующим образомthis:

var ndx = crossfilter(items)
var dateDimension = ndx.dimension(d => d.date)
// group by month
var overviewGroup = dateDimension.group(d => {
    if (d) {
        return new Date(d.getUTCFullYear(), d.getUTCMonth())
    }
})


var minMonth = new Date(dateDimension.bottom(1)[0].date.getUTCFullYear(), dateDimension.bottom(1)[0].date.getUTCMonth())
var maxMonth = new Date(dateDimension.top(1)[0].date.getUTCFullYear(), dateDimension.top(1)[0].date.getUTCMonth() + 1)

this.overviewChart
    .height(60)
    .minWidth(600)
    .width(null)
    .margins({top: 0, right: 10, bottom: 30, left: 40})
    .dimension(dateDimension)
    .centerBar(false)
    .x(scale.scaleTime().domain([minMonth, maxMonth]))
    .round(time.timeMonths.round)
    .xUnits(time.timeMonths)
    .group(overviewGroup)
    .on('filtered', () => { this.displayItems = ndx.allFiltered() })

Отображает правильные данные по оси Y, но столбцы имеют ширину всего 1 пиксель.Диаграмма, о которой идет речь, - это меньшая, нижняя диаграмма. Предполагается, что это диаграмма диапазона для более высокого разрешения (которая объединяет записи по дням и отображается правильно), но это для другого вопроса!

Chart with tiny bars

Я получаю лучшие результаты с .xUnits(() => { return overviewGroup.all().length - 1 }), который дает более широкую полосу и ближе к моему намеченному результату, но это все еще не правильно:

looks better but still not right

Я вытащил свой код в скрипку, но в скрипте он работает более или менее, как и ожидалось: https://jsfiddle.net/y1qby1xc/9/

...