1

我想在 d3 中制作一个多折线图。我见过的大多数示例都使用宽格式数据。我的数据比宽格式允许的更复杂,它有多个分组结构。每个受试者在多天进行评分,并在一个治疗组中。这是一个例子:

Subject Score Time Group
Sub1    19.0  1    1
Sub1    19.0  2    1
Sub2    18.9  1    1
Sub2    19.1  2    1
Sub3    20.7  1    2
Sub3    19.5  2    2

我想为每个Subject制作不同的线条,但按Group着色。我尝试将其转换为 JSON 格式,如下所示:

[{"Subject" : "Sub1", "Score":"19.0", "Time":"1", "Group" : "1"} ...]

我想我可以将数据转换为宽,单独添加每个 svg 路径,而不是单独选择每个 svg,然后更改颜色,但我想知道是否有一种方法可以使用这种数据结构而不必这样做?

4

1 回答 1

1

听起来您根本不需要更改数据的结构。您可以d3.nest()根据需要使用 d3 中的数据重组数据。代码看起来像(模尺度)

var nested = d3.nest()
               .key(function(d) { return d.Subject; })
               .entries(data);
var line = d3.svg.line()
             .x(function(d) { return d.Time; })
             .y(function(d) { return d.Score; });
svg.selectAll("path").data(nested).enter()
   .append("path")
   .attr("fill", function(d) { return color(d.values[0].Group); })
   .attr("d", function(d) { return line(d.values); });
于 2013-03-20T20:22:21.640 回答