D3 Проблемы со шкалой времени, расчет позиции предметов

Я работаю над графиком баров, который использует шкалу времени по оси X.

Каждый столбец представляет месяц, поэтому все даты устанавливаются как ГГГГ-ММ, и когда я загружаю данные, я анализирую их с помощью:

var parseDate = d3.time.format("%Y-%m").parse;

Проблема в том, что, поскольку каждый месяц имеет различное количество дней, некоторые столбцы ближе, чем другие, вместо того, чтобы иметь одинаковое поле, как вы можете видеть на этом скриншоте:

шкальный

Здесь вы можете найти код, http://tributary.io/inlet/8700564

Спасибо

1 ответ

У вас есть два варианта: либо использовать порядковый (категория) масштаб для оси X, который придаст всем барам одинаковую ширину, либо установить ширину каждого бара по отдельности в зависимости от длины месяца.

Чтобы вычислить продолжительность месяца, вы можете использовать интервалы времени d3, чтобы получить дату начала следующего месяца. Тогда ширина - это просто разница между позициями двух дат в xScale, возможно, корректируемая отступом, чтобы дать некоторое пространство между столбцами.

rect.attr("x", function(d){return xScale(d.date) + padding;})
    .attr("width", function(d){
              return xScale( d3.time.month.offset(d.date, 1) )
                   - xScale(d.date)
                   - 2*padding;
        });
Другие вопросы по тегам