【问题标题】:Easiest way to round Date Scale in D3.js在 D3.js 中舍入日期刻度的最简单方法
【发布时间】:2012-10-07 19:29:37
【问题描述】:

我在 d3 中有一个日期刻度,我希望将 x.domain()[0] 设置为该月的第一天,并将 x.domain()[1] 设置为该月的最后一天。假设数据集是这样的

data : [
{date: '2011-12-31', amount: 200},
{date: '2012-01-01', amount: 100},
{date: '2012-01-02', amount: 300},
{date: '2012-01-03', amount: 400},
{date: '2012-02-01', amount: 400}
]

这是一个人为的例子,但基本上在这种情况下,将域限制在 1 月份。寻找一个简单的 d3esque 解决方案。

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    我认为您正在寻找的是 .nice() 函数,它使域以不错的值开始和结束(在您的情况下,一个月的第一天和最后一天)。您仍然需要过滤您的数据,我认为在这种情况下自动确定您想要显示 1 月还是 12 月或 2 月并没有什么魔力。

    var data = [
        {date: new Date(2011,11,31), amount: 200},
        {date: new Date(2012,0,1), amount: 100},
        {date: new Date(2012,0,2), amount: 300},
        {date: new Date(2012,0,3), amount: 400},
        {date: new Date(2012,1,1), amount: 400}
    ];
    
    var month = data.filter(function (d) { return d.date.getMonth() === 0; });
    
    var x = d3.time.scale()
        .domain(d3.extent(month, function(d) { return d.date; }))
        .range([0, width])
        .nice(d3.time.month);
    

    您可以在http://bl.ocks.org/3849376 看到一个这样的例子。

    【讨论】:

    • 重新审视这个问题 - 它给了我 1 月 1 日 - 2 月 1 日 - 无论如何得到 1 月 1 日 - 1 月 31 日?
    • @imrane 可能为时已晚,但不要在 2 月份添加数据 - 示例中的最后一个数据条目是 2 月 1 日。
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多