javascript - 在折线图中的多条线上绘制点

标签 javascript d3.js

我正在尝试在线条上绘制小圆圈以表示折线图中的数据点,使用以下代码:

// Add the scatterplot
  g.selectAll("dot")
    .data(newdata[0].values)
    .enter().append("circle")
    .attr("r", 5)
    .attr("cx", function(d) {
      return x(d.date);
    })
    .attr("cy", function(d) {
      return y(d.value);
    })            
    //.attr("stroke", "blue")
    //.attr("stroke-width", 2)
    //.attr("fill", "none")
    .on("mouseover", function(d) {
      div.transition()
        .duration(200)
        .style("opacity", .9);
      div.html(formatTime(d.date) + "<br/>" + d.value)
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY - 28) + "px");
    })
    .on("mouseout", function(d) {
      div.transition()
        .duration(500)
        .style("opacity", 0);
    });

但问题是,我一次只能传递一个元素的值:.data(newdata[0]).values)。这只会在一条线上绘制点。我可以将整个代码放入循环中并使用计数器 i 而不是 0。但这将是一个非常糟糕的解决方案。以下是我的数据结构:

[{
  "id": "primary",
  "values": [{
    "date": "2011-03-31T18:30:00.000Z",
    "value": 58.13
  }, {
    "date": "2011-04-30T18:30:00.000Z",
    "value": 53.98
  }]
}, {
  "id": "secondary",
  "values": [{
    "date": "2011-03-31T18:30:00.000Z",
    "value": 28.13
  }, {
    "date": "2011-04-30T18:30:00.000Z",
    "value": 35.13
  }]
}];

Here is the JSFiddle.

请建议怎么做! :)

最佳答案

如何先使用 reduce 展平数据? :

var values = newdata.reduce(function(arr, d){
     return arr.concat(d.values);
}, []);

这将为您提供构造点所需的所有对象的数组:

[{"date":"2011-03-31T18:30:00.000Z","value":58.13},
 {"date":"2011-04-30T18:30:00.000Z","value":53.98},
 {"date":"2011-03-31T18:30:00.000Z","value":28.13},
 {"date":"2011-04-30T18:30:00.000Z","value":35.13}]

当然,只需绑定(bind)这些值即可创建您所有的圈子:

g.selectAll("dot")
 .data(values)
 ... // etc

关于javascript - 在折线图中的多条线上绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551773/

相关文章:

带重定向的 JavaScript onclick 函数不起作用

datetime - 人力车误解了日期时间

typescript - 如何编写 Typescript d.ts 文件来扩展 @types/d3

javascript - 查找字符串中的第一个字母 - Javascript

c# - 如何在页面加载后抓取包含使用 JavaScript 更新的数据的页面?

javascript - 在 JavaScript 中添加和显示随机对象数组中的视频

javascript - 如何制作可点击的过渡条形图以在 d3 v4 中显示 3 个图形?

javascript - D3 图表,如何迭代 Json 数据而不是来自文件?

d3.js - 以毫秒为单位的时间刻度

javascript - Angular - 指令不起作用