我正在使用NVD3库根据Rails控制器中生成的数据制作简单的折线图。我用来在Rails中生成数据的代码是:
task.task_values.each do |u|
array.push({ :x => u.created_at.to_i * 1000, :y => u.value.to_i })
end
data_label = task.name + " ("+ task_unit +")"
taskValuesList = [{:key => data_label, :values => array}]
data = {:type => "line", :data => taskValuesList}
然后,在我看来,我有以下JS代码:
nv.addGraph(function() {
var chart = nv.models.lineChart()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; });
chart.xAxis
.showMaxMin(false)
.tickFormat(function(d){return d3.time.format("%m/%d/%y")(new Date(d));});
chart.yAxis
.tickFormat(d3.format(',d'));
d3.select('#chart<%= i %> svg')
.datum(data.data)
.transition().duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
图表呈现正确,但当我尝试鼠标悬停数据点以显示工具提示时,我收到错误“Uncaught TypeError:无法读取属性'x'未定义”
答案 0 :(得分:26)
我遇到了同样的错误并且被困了好几个小时。经过一番调查后,我发现我使用的是 d3.js 的最新版本,该版本与 nvd3.js
的最新版本不兼容确保您使用的是nvd3存储库中包含的d3.js版本:/lib/d3.v3.js
发现这一点非常棘手。特别是因为nvd3 documentation告诉你使用最新的d3.js版本; - (
答案 1 :(得分:3)
如果您看到Uncaught TypeError: Cannot read property 'x' of undefined
,可能是因为您的数据系列包含不同数量的点数。
检查是否只有一个系列发生这种情况。
答案 2 :(得分:-2)
确保您的数据采用JSON格式
以下是示例JSON数据应如何显示
data = [{
key : "Line 1",
color : "#51A351",
values : [{
x : 1373403179000,
y : 40
}, {
x : 1373403469000,
y : 30
}, {
x : 1373403567000,
y : 20
}]
}, {
key : "Line 2",
color : "#BD362F",
values : [{
x : 1373403179000,
y : 60
}, {
x : 1373403469000,
y : 50
}, {
x : 1373403567000,
y : 70
}]
}]
<强> UPDATE :
强>
这是NVD3 Line chart