我在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解决方案。
答案 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找到相关示例。