【发布时间】:2017-11-12 14:40:03
【问题描述】:
通过一些 D3 示例,我相信已经发现了一个我无法解释的 d3 错误或行为。
D3 在调用 .data() 方法时似乎截断了数组。
<script>
d3.csv('medium_january.csv', function(error, data) {
if (error) {
console.error('Error getting or parsing the data.');
throw error;
}
var chart = bubbleChart().width(600).height(400);
d3.select('#chart').data(data).call(chart);
//here data has 43 elements with the 1st beginning "how flex...
});
</script>
在气泡图.js中
function bubbleChart() {
var width = 960,
height = 960,
maxRadius = 6,
columnForColors = "category",
columnForRadius = "views";
function chart(selection) {
var data = selection.enter().data();
//here data has 42 elements with the first being "How I went from zero
var div = selection,
svg = div.selectAll('svg');
svg.attr('width', width).attr('height', height);
//rest of script
这里的工作示例
https://bl.ocks.org/dmesquita/37d8efdb3d854db8469af4679b8f984a
问题出现在bubblechart.js
如果第一个块中数据的条目数为43,则在chart()函数中变为42。 selection.enter() 的长度是 43,但是在 .data() 之后我们只有 42 个条目。
我尝试使用不同的数据集,认为错误的数据可能会迫使 .data() 失败,但使用其他数据得到相同的结果。如果有坏数据,我会期待一个错误,而不是默默地跳过。
为什么 .data() 会默默地截断第一个数组值?
【问题讨论】:
-
我编辑了示例以显示数组被截断的位置。
标签: javascript arrays d3.js