在D3.js中舍入日期比例的最简单方法

时间:2012-10-07 19:29:38

标签: javascript d3.js

我在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解决方案。

1 个答案:

答案 0 :(得分:5)

我认为您正在寻找的是.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找到相关示例。