Как удалить выходные дни с оси x на графике dc js - PullRequest
0 голосов
/ 23 июня 2018

У меня есть данные для каждой даты с января 2018 года, и я создаю линейную диаграмму из этих данных.Каждые выходные счетчик моих данных равен нулю, поэтому каждые выходные он показывает провал в моем графике (когда данные доходят до нуля).Я хочу избежать этого падения.У меня есть столбец Дата, а также столбец День.Столбец «День» имеет значения от 1 до 7, представляющие каждый день недели (1 - понедельник, а 7 - воскресенье).Могу ли я изменить свою ось x или график, чтобы показывать только данные о днях недели?

Fiddle

var data = [
 { Type: 'T', Date: "2018-01-01", DocCount: 10, Day: 1},
 { Type: 'E', Date: "2018-01-01", DocCount: 10, Day: 1},
 ...
]

chart
.height(350)
.width(450)
.margins({top: 10, right: 10, bottom: 5, left: 35})
.dimension(dateDim)
.group(tGroup)
.stack(eGroup, "E")
.valueAccessor( function(d) {
    return d.value.count;
})
.transitionDuration(500)
.brushOn(false)
.elasticY(true)
.x(d3.time.scale().domain([minDateTime, maxDateTime]))
.xAxis().ticks(10).tickFormat(d3.format("s"));

enter image description here

1 Ответ

0 голосов
/ 24 июня 2018

Шкала времени всегда будет очень буквальной о том, как она отображает даты по x координатам. У него нет понятия «пропуска даты».

Вместо этого я бы предложил использовать для этой цели порядковую шкалу. Используя порядковый масштаб, вы решаете, какие именно входные и выходные значения будут. dc.js также поможет вам, автоматически определив входные (доменные) значения.

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

chart
.x(d3.scale.ordinal())
.xUnits(dc.units.ordinal)

Удалите все пустые даты, подобные этой. remove_empty_bins - это из FAQ , но я изменил его, чтобы посмотреть на элемент count.

function remove_empty_bins(source_group) {
    return {
        all:function () {
            return source_group.all().filter(function(d) {
                //return Math.abs(d.value) > 0.00001; // if using floating-point numbers
                return d.value.count !== 0; // if integers only
            });
        }
    };
}
var nz_tGroup = remove_empty_bins(tGroup),
    nz_eGroup = remove_empty_bins(eGroup);
chart
.group(nz_tGroup)
.stack(nz_eGroup, "E")

Только вопрос в том, что если в будний день нет данных? Вы все еще хотите, чтобы это упало до нуля? В этом случае, я думаю, вам, вероятно, придется изменить фильтр в remove_empty_bins выше.

weekdays only

Вилка вашей скрипки.

...