【问题标题】:Multiple multi-series d3 line charts on one page一页上的多个多系列 d3 折线图
【发布时间】:2013-05-01 10:56:13
【问题描述】:

使用 d3 我想在一个页面上绘制多个时间序列折线图,每一个都有两条线。

this page 上的示例用于多个图表,我的代码在每个图表上使用单行。但我不确定如何最好地修改该示例以使用多折线图。

这个例子是这样做的:

d3.csv("sp500.csv", function(data) {
  var formatDate = d3.time.format("%b %Y");

  d3.select("#example")
      .datum(data)
    .call(timeSeriesChart()
      .x(function(d) { return formatDate.parse(d.date); })
      .y(function(d) { return +d.price; }));
});

TimeSeriesChart() 定义in this file

如何最好地调整它以处理两条(或更多)线(具有相同的 x 轴值和相同的 y 比例)?

FWIW,我的数据是在 JS 数组/哈希中,而不是从 CSV 中读取的,但我想原理是一样的。

【问题讨论】:

  • 你看过这个多系列折线图的例子吗:bl.ocks.org/mbostock/3884955
  • 好的,谢谢。我目前正在尝试使该功能适用​​于一个页面上的多个图表,这可能是一种比另一种方法更简单的方法......还没有......

标签: javascript graph charts d3.js


【解决方案1】:

您可以以相同的方式传入包含多行数据的数据结构。唯一的区别在于您将如何处理引用文件中的数据。您需要更改中的功能

selection.each(function(data) {

首先,您需要调整正在进行的预处理以及确定轴限制的代码。再往下,你会改变

// Update the line path.
  g.select(".line")
      .attr("d", line); 

类似

g.selectAll(".line").data(<data for your two lines here>)
 .enter()
 .append("path")
 .attr("class", "line")
 .attr("d", line);

并删除该行

gEnter.append("path").attr("class", "line");

在那之前。

具体更改取决于您传入的格式。

另一种方法(如果您刚开始可能更容易)方法是简单地将附加数据添加到新属性中,添加一个新的行生成器来访问该数据并重复生成该行的代码并调用具有不同类名和不同生成器的行生成器。这是一种我一般不会推荐的 hacky 方法,但以这种方式开始可能会更容易。

【讨论】:

  • 非常感谢拉尔斯。我最终调整了Multi-series line charts example - 基本上把它全部放在一个函数中,并为每个图表调用一次,带有图表的数据和图表的类名。可能不太优雅,但对我来说更容易理解。
  • (哦,虽然我还没有测试过你的建议,但我会将它们标记为答案以供将来参考。)
  • 再次感谢 Lars 迟到了。我已经完成了这项工作,并将我的代码放在这里以供将来参考:gist.github.com/philgyford/5774449
猜你喜欢
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
相关资源
最近更新 更多