我对d3.time.scale()
有一个简单的问题。我有以下代码:
var xScale = d3.time.scale()
.range([0, w - margin.left - margin.right])
.domain(d3.extent(data, function(d) { return d.startDate; })); // this is wrong
和示例.json
数据:
{
"name":"Mark",
"startDate":"4-Oct-1992", // make this first date in scale
"endDate":"6-Oct-1992",
},
{
"name":"Bill",
"startDate":"17-Dec-1992",
"endDate":"20-Dec-1992",
}
{
"name":"Steve",
"startDate":"17-Jan-1993",
"endDate":"20-Jan-1993" // make this last date in scale
}
基本上希望将.domain
更改为从数据集的第一个startDate
转到最后一个endDate
。
如果无法做到这一点,另一种解决方案是手动设置每个日期。即要添加到json
的ff代码:
{
"name":"Mark",
"startDate":"4-Oct-1992",
"endDate":"6-Oct-1992",
"scale":"1-Jan-1992" // first date
},
{
"name":"Bill",
"startDate":"17-Dec-1992",
"endDate":"20-Dec-1992",
}
{
"name":"Steve",
"startDate":"17-Jan-1993",
"endDate":"20-Jan-1993"
"scale":"31-Dec-1993" // last date
}
.domain(d3.extent(data, function(d) { return d.scale; }));
(我实际上会尝试一下,看看它是否有效)
编辑:显然它不起作用,我得到 TypeError: string is undefined
。
我确实记得在forEach
函数中解析日期以使其可读:d.scale = parseDate(d.scale);
但为什么它仍然不起作用? 击>
我为其他所有数据添加了一个空的"scale":""
,现在可以了!