2012-06-13 35 views
1

我試圖用D3 API referencethis question at Stack Overflow中演示的值訪問器爲每層創建D3流圖表。在D3 Streamgraph中正確使用stack.values([accessor])?

標題追加罰款,但它似乎並沒有附加值。任何想法可能會出錯?

我是新來的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; }); 
+0

你能爲我提供的代碼來做到這一點?我複製你的代碼,但它不起作用。謝謝。對不起,我是d3和js的新手。 – v4r

+1

@DuongThang恐怕我沒有這個方便了。它絕對有效。也許如果你用你的代碼發佈一個問題,我可以看看它。 –

回答

7

堆棧佈局知道你所指定的值訪問,但該地區發電機沒有。所以,你必須通過d.values而非d該地區發生,就像這樣:

.attr("d", function(d) { return area(d.values); }) 
+3

邁克你是一個傳奇人物。謝謝你幫助我,並感謝發明d3! –