我尝试使用基于CSV数据的读取来构建简单的条形图。现在我只是在我的脚本中包含数据。当我尝试运行它时,我收到此错误:
Uncaught TypeError: Cannot read property 'length' of undefined
这是脚本:
var data;
function showChart() {
var theCsv =
"name,value\n" +
"Foo,43\n" +
"bar,76\n" +
"foo2,88\n" +
"bar2,59\n";
var csvString;
var content = [{
key: "totals",
values: []
}];
var input = d3.csv.parse(theCsv, function(d) {
return {
name: d.name,
value: d.value
};
});
nv.addGraph(function() {
var chart = nv.models.discreteBarChart()
.x(function(d) {
return d.name
})
.y(function(d) {
return d.value
})
/*.showvalues(true)*/
d3.select('#chart svg')
.datum(input)
.transition(1000)
.call(chart)
nv.utils.windowResize(chart.update);
return chart;
});
fileDisplayArea.innerText = csvString
}
据调试我可以看出,错误发生在.call(chart)
行,但我不知道问题是什么。我找到了几个关于D3版本的链接,但我尝试了几个不同的链接,但我仍然收到错误。
这里是JSFiddle。
答案 0 :(得分:4)
看起来您需要将数据包装到另一个对象中:
var input = d3.csv.parse(theCsv, function(d) {
return {
name: d.name,
value: d.value
};
});
// get it into the form required by `nvd3`
input = [{ key: "Some Key", values: input }]
这里有一个updated fiddle,上面添加了一条额外的行。
我无法找到关于为什么的任何文档,但这似乎是使用的模式(基于this example on the site)。