Динамическое изменение оси X на диаграммах D3 Гистограмма с накоплением

Цель, над которой я работаю, состоит в том, чтобы ось X изменила свои отметки в зависимости от объема получаемых данных. У меня ось X работает отлично, но я изо всех сил пытаюсь отобразить столбцы с накоплением. Я все еще довольно новичок в d3, поэтому советы и исправления могут помочь. Я создал jsfiddle с примером.

В нижней части части скрипта javascript вы найдете два вызова функций. Первый использует набор данных с 11 точками данных. Второй вызов использует набор данных с гораздо большим количеством точек данных. Если существует 60 или менее дней (это точки данных), то на оси будет отображаться как день, так и начало месяца. При наличии более 60 дней график перестает отображать отдельные дни и начинает отображать только начало месяцев. Вы можете комментировать / раскомментировать их, чтобы увидеть разницу.

Я считаю, что проблема возникает в этой части кода:

layer.selectAll("rect")
    .data(function (d) { return d.data; })
    .enter().append("rect")
    .attr("x", function (d) { return x(d.x); })
    .attr("y", function (d) { return y(d.y + d.y0); })
    .attr("height", function (d) { return y(d.y0) - y(d.y + d.y0); })
    .attr("width", x.rangeBand());

Конкретно эта строка: .attr("width", x.rangeBand());,

Когда я вручную добавляю ширину, например, 1, тогда отображаются полосы. Но они не расположены правильно относительно оси x. Кажется, что я не могу понять, как заставить прямоугольники корректировать их правильный размер так, чтобы они все правильно помещались на своем месте.

Вот пример jsfiddle

0 ответов

Другие вопросы по тегам