【问题标题】:Having trouble drawing lines in d3js在 d3js 中画线时遇到问题
【发布时间】:2016-06-07 15:42:07
【问题描述】:

第一次 d3.js 用户,也是 javascript 的新手。我想创建一个绘制 3 个波的图表,其中第三个是前 2 个波的部分解构。我已将所需的计算保存到名为 data 的 JSON 对象中,并创建了 3 行 line1 @ 987654323@ 和line3。我关注了 youtube 教程,并查看了 stackoverflow 和 Mike Bostock 的维基百科页面上的无数代码 sn-ps。我一生都无法弄清楚为什么线条不画?我是 JSON 新手,但我想学习它,这就是我保存数据的方式。我没有正确绑定数据吗?当我运行代码时,控制台没有给我错误,但我注意到路径包含 NAN 或不包含似乎是 JSON 对象的 time 成员的数字值:d="M0,NaNL1.8,NaNL3.6,NaNL5.4,NaNL7.2,NaNL9,NaNL10.8,NaNL12.600000000000001,NaNL14.4,NaNL16.200000000000003,NaNL18.000000000000004,NaNL19.800000000000004,NaNL21.600000000000005,NaNL23.400000000000006,NaNL25.200000000000006,NaNL27.000000000000007,NaNL28.800000000000008,NaNL30.60000000000001,NaNL32.40000000000001,NaNL34.20000000000001,NaNL36.00000000000001,NaNL37.800000000000004,NaNL39.599999999999994,NaNL41.4,NaNL43.199999999999996,NaNL44.99999999999999 并且它继续在。我假设这些是我在第一个循环中生成的值?

可能会出现问题的部分代码(完整代码在 jsfiddle 链接中提供):

    var line1 = d3.svg.line()
    .x(function(d) { return widthScale(d.time); })
    .y(function(d) { return verticalScale(d.y1); });

var line2 = d3.svg.line()
    .x(function(d) { return widthScale(d.time); })
    .y(function(d) { return verticalScale(d.y2); });

var line3 = d3.svg.line()
    .x(function(d) { return widthScale(d.time); })
    .y(function(d) { return verticalScale(d.y3); });

data.forEach(function(d) {
    d.time = + d.time;
    d.wave1 = d.wave1;
    d.wave2 = d.wave2;
    d.wave3 = d.wave3;
});

也许是这样的:

    // draw lines? what am I missing?
canvas.append("g")
    .datum(data)
    .attr("class", "line")
    .attr("d", line1);

感谢您的帮助,我很乐意提供任何其他信息。谢谢!

这是我尝试的 jsfiddle:https://jsfiddle.net/fdhnqh1d/3/

【问题讨论】:

  • 请发布您需要帮助的代码部分。您提供了一些输出,但我们无法调试。
  • 好的,我编辑了我认为可能存在问题的地方,完整的代码在底部的 jsfiddle 中可用。感谢观看
  • 谢谢。我错过了您对小提琴的提及,因为隧道视野看到没有代码。

标签: javascript json d3.js path


【解决方案1】:

我已更新您的小提琴 https://jsfiddle.net/fdhnqh1d/4/ 以修复生成。

您的行生成器引用了一个未定义的属性d.y1。这里我改成d.wave1来匹配你的数据模型。

var line1 = d3.svg.line()
.x(function(d) { return widthScale(d.time); })
.y(function(d) { return verticalScale(d.wave1); });

现在输出

M0,263.5596698504196L1.8,263.5674382668522L3.6,263.5751378843530...

【讨论】:

  • 漂亮!现在这个问题已经解决了。但是,我仍然对为什么我的line1 没有被绘制感到困惑?当我检查 svg 元素时,我看到正在放置一个名为 line1 的路径,但该行实际上并未出现。我一定是画错了。
  • 我要检查的第一件事是它是否定位或定向在您期望的位置。它可能需要翻译。
  • 检查了一下,它不需要翻译,问题不在于这条线是不可见的。这条线正在绘制,但是当我检查它时,它显示它是 0x0 像素。所以它开始了这条线,但从不添加第一个点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多