D3.js 尺度域的奇异问题

D3.js 尺度域的奇异问题,d3.js,D3.js,我对尺度有一个非常奇怪的问题,如果我把(在本例中)yscale的域放在这里 .domain([0,d3.max(数据集,函数(d){return d.ycoord;})]) 它错误地设置了我的轴,就像它只显示了一半。 奇怪的是,为了解决这个问题,我试了一会儿,然后在末尾加上a/1,就像这样: .domain([0,d3.max(数据集,函数(d){return(d.ycoord/1);})]) 它确实正确地显示了轴,如这些屏幕截图所示 这里还有关于JSFIDLE的完整代码: 所以我的问题是

我对尺度有一个非常奇怪的问题,如果我把(在本例中)yscale的域放在这里
.domain([0,d3.max(数据集,函数(d){return d.ycoord;})])

它错误地设置了我的轴,就像它只显示了一半。 奇怪的是,为了解决这个问题,我试了一会儿,然后在末尾加上a/1,就像这样:

.domain([0,d3.max(数据集,函数(d){return(d.ycoord/1);})])

它确实正确地显示了轴,如这些屏幕截图所示

这里还有关于JSFIDLE的完整代码:


所以我的问题是:为什么它会这样?我真的对此一无所知,想知道是否有人能够解决这个问题

问题在于,您所解释的数字(
ycoord
)实际上是字符串,因为它们直接来自CSV。也就是说,不是140,而是“140”,作为一个字符串,它实际上比“95”小。因此,为刻度确定的最大值不正确。实际需要数字的D3函数(例如scale函数)会隐式地将您提供给它们的字符串转换为数字,因此不会出现错误消息

要解决这个问题,只需在执行任何其他操作之前将字符串转换为数字

dataset.forEach(function(d) { d.ycoord = +d.ycoord; });

谢谢,我以为数字是作为数字而不是字符串来读的,这就解决了问题!