2

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

4

1 回答 1

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看到一个例子。

于 2012-10-07T20:37:48.150 回答