我正在學習D3.js,並試圖讓我的頭在data keys與streamgraphs一起使用。我想,以適應official streamgraph example:d3.js:如何添加數據密鑰?
...讓每個路徑有一個明確的數據密鑰,從而使鼠標懸停日誌中的數據項。
官方的例子添加路徑如下:
var area = d3.svg.area()
.x(function(d) { console.log('x', d.data); return d.x * w/mx; })
.y0(function(d) { return h - d.y0 * h/my; })
.y1(function(d) { return h - (d.y + d.y0) * h/my; });
vis.selectAll("path")
.data(data0)
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area);
我試圖適應的代碼如下,但我不知道如何改變data0
結構(目前的數組的數組)要達到什麼我想:
vis.selectAll("path")
.data(data0, function(d) { return d.name }) // Add key function
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area)
.on("mouseover", function (d,i) {
console.log("mouseover", d.name); // Log name property on mouseover
});
因爲它的立場,我沒有作出來的data0
結構的任何變化,這毫不奇怪不起作用。我怎樣才能將name
屬性添加到data0
而不會搞亂area
和.data()
函數?
更新:要更清楚一點:D3文檔說,area function is expecting a two-dimensional array。因此,如果我將data0
從一個二維數組更改爲一個對象數組,每個對象都有一個name
鍵和一個data
鍵,我怎樣才能改變我傳遞給area
的東西?
是的,但如果我添加一個「姓名」鍵的數據(即,如果我重組它是對象的數組,而不是數組的數組),則面積函數停止工作。我怎樣才能調整面積函數呢? – Richard 2012-03-13 10:07:41
假設你把數據數組放在數據下,那麼它會類似地變成'.attr(「d」,function(d){return area(d.data);}'。 – 2012-03-13 18:46:11
Ahhhh! d未能成功,非常感謝。 – Richard 2012-03-13 22:24:35