1

我正在尝试使用值访问器创建一个 D3 流图,其中每层包含额外的数据,如D3 API 参考Stack Overflow 上的这个问题所示

标题附加得很好,但似乎没有附加值。关于可能出现问题的任何想法?

我是 d3 的新手,所以我确信它很简单。代码如下。

var layers = [
  {
    "name": "apples",
    "values": [
      { "x": 0, "y":  91},
      { "x": 1, "y": 290}
    ]
  },
  {  
    "name": "oranges",
    "values": [
      { "x": 0, "y":  9},
      { "x": 1, "y": 49}
    ]
  }
];

var     m = 2; // number of samples per layer
var width = 960,
    height = 500,
    mx = m - 1,
    my = 350;

var stack = d3.layout.stack()
    .offset("wiggle")
    .values(function(d) { return d.values; });

var area = d3.svg.area()
    .x(function(d) { 
        return d.x * width / mx; 
    })
    .y0(function(d) { 
        return height - d.y0 * height / my; 
    })
    .y1(function(d) { 
        return height - (d.y + d.y0) * height / my; 
    });

var vis = d3.select("#chart")
  .append("svg")
    .attr("width", width)
    .attr("height", height);

vis.selectAll("path")
    .data(stack(layers))
  .enter().append("path")
    .attr("d", area)
  .append("title")
    .text(function(d) { return d.name; });
4

1 回答 1

7

堆栈布局知道您指定的值访问器,但区域生成器不知道。因此,您必须传递d.values而不是传递d给区域生成器,如下所示:

.attr("d", function(d) { return area(d.values); })
于 2012-06-14T16:09:39.923 回答