【问题标题】:How to remove weekends dates from x axis in dc js chart如何从 dc js 图表中的 x 轴删除周末日期
【发布时间】:2018-06-23 13:17:09
【问题描述】:

我有 2018 年 1 月以来每个日期的数据,我正在根据这些数据创建一个堆叠折线图。每个周末我的数据计数都是零,所以每个周末它都会在我的图表中显示一个下降(当数据达到零时)。我想避免这种下降。我有一个 Date 列和一个 Day 列。 Day 列的值从 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"));

【问题讨论】:

    标签: d3.js dc.js crossfilter


    【解决方案1】:

    时间尺度总是非常直接地说明它如何将日期映射到 x 坐标。它没有“跳过日期”的概念。

    相反,我建议为此使用序数比例。使用序数比例,您可以准确地决定输入和输出值是什么。 dc.js 还将通过自动确定输入(域)值来帮助您。

    告诉图表使用这样的序数比例:

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

    像这样删除任何空日期。 remove_empty_binsfrom the 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 中的过滤器。

    Fork of your fiddle.

    【讨论】:

    • 您的解决方案非常完美。但是我注意到我已经在 d3 v3 中创建了小提琴,并且在我的实际问题中使用了 d3 v4,所以我将 d3.scale.ordinal() 修改为 d3.scaleOrdinal() 但它给了我错误“无法获取未定义或空引用的属性 y” ,你能帮帮我吗?
    • 当然,如果您发布一个演示错误的小提琴。我认为这与这个答案无关,但如果没有看到正在运行的代码,我无法判断。
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2016-04-17
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多