正确使用D3 Streamgraph中的stack.values([accessor])?

Der*_*ill 1 javascript layout area d3.js stream-graph

我正在尝试使用值访问器创建一个带有每层附加数据的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; });
Run Code Online (Sandbox Code Playgroud)

mbo*_*ock 7

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

.attr("d", function(d) { return area(d.values); })
Run Code Online (Sandbox Code Playgroud)

  • 迈克,你是一个传奇.感谢您帮助我,感谢发明d3! (3认同)