问题
I am trying to create a D3 streamgraph chart with additional data per layer using a values accessor, as demonstrated in the D3 API reference and this question at Stack Overflow.
The title appends fine, but it does not appear to append the values. Any ideas on what might be going wrong?
I'm new to d3 so I'm sure it's straightforward. The code is below.
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; });
回答1:
The stack layout knows the values accessor you've specified, but the area generator does not. So, you have to pass d.values
rather than d
to the area generator, like so:
.attr("d", function(d) { return area(d.values); })
来源:https://stackoverflow.com/questions/11009524/correct-usage-of-stack-valuesaccessor-in-d3-streamgraph