当前位置: 首页 > 知识库问答 >
问题:

NVD3线图未捕获类型错误:无法读取未定义的属性x

秦博延
2023-03-14

我正在使用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”

共有3个答案

终翔
2023-03-14

确保您的数据为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折线图的工作小提琴

墨雨华
2023-03-14

如果您看到未捕获类型错误:无法读取未定义的属性“x”,可能是因为您的数据系列包含不同的点数。

检查是否只有一个系列发生这种情况。

蔚学林
2023-03-14

我也犯了同样的错误,被困了几个小时。经过一些调查,我发现我使用的是最新版本的d3.js,与最新版本的nvd3.js不兼容

确保您使用的是nvd3存储库中包含的d3.js版本:/lib/d3.v3.js

这很难弄清楚。特别是因为nvd3文档告诉您使用最新的d3.js版本-(

 类似资料: