1 回答
TA贡献1829条经验 获得超6个赞
我无法完全测试您的代码,但我认为问题如下:
您将线生成器定义为:
lineGenerator
.x(function(d){return XScale(d.model) })
.y(function(d){return YScale(d.avg)});
然后你这样称呼它:
lineGenerator([a[0].model,a[0].avg])
因此,当您调用 lineGenerator 时,您正在传递modeland avg,然后,行生成器尝试再次访问model和访问avg,因此将调用更改为:
lineGenerator([a[0],a[0]])
可能会解决问题
看到示例后编辑
当您这样做时,attr("d", function(d) { return lineGenerator(d.value); })您正在以这种方式传递数据:
{
avg: (7) [15, 17, 13, 18.75, NaN, 24.3, NaN],
model: (7) [70, 72, 73, 78, 79, 80, 82]
}
线生成器以这种方式期望数据:
[
{avg: 15, model: 70},
{avg: 17, model: 72},
{avg: 13, model: 73},
{avg: 18.75, model: 78},
{avg: NaN, model: 79},
{avg: 24.3, model: 80},
{avg: NaN, model: 82},
]
就在该ccountry.append("path")行之前,我执行了以下操作并更改了数据格式(这只是一个示例,我将更改您用来以正确方式格式化它们的函数):
var lineData = [];
for(var k = 0; k<a[0].avg.length; k++) {
lineData.push({
avg: a[0].avg[k],
model: a[0].model[k]
});
}
console.log(lineGenerator(lineData));
最后console.log返回了这个:
d3-line.html:208 M0,370.3539823008849L20.952380952380953,357.07964601769913C41.904761904761905,343.80530973451323,83.80952380952381,317.2566371681416,125.71428571428571,330.5309734513274C167.61904761904762,343.80530973451323,209.52380952380952,396.9026548672566,251.42857142857142,385.28761061946904C293.3333333333333,373.6725663716814,335.23809523809524,297.34513274336285,377.1428571428571,NaNC419.04761904761904,NaN,460.9523809523809,NaN,502.85714285714283,NaNC544.7619047619047,NaN,586.6666666666666,NaN,628.5714285714286,NaNC670.4761904761905,NaN,712.3809523809523,NaN,733.3333333333334,NaNL754.2857142857142,NaN
最后,你可以看到,有一些楠的一些avg属性,我取而代之的是一个随机数,取代了线.attr("d", function(d) { return lineGenerator(d.value); })用.attr("d", function(d) { return lineGenerator(lineData); }),然后我们得到了一条线:
添加回答
举报