2015-09-04 54 views
0

在麥克博斯托克的「Towards Reusable Charts」爲什麼<p>元件的初始數據鏈路與基準製成(數據):D3數據()對數據()

d3.csv("sp500.csv", function(data) { 
    var formatDate = d3.time.format("%b %Y"); 

    d3.select("#example") 
     .datum(data) 
    .call(timeSeriesChart() 
     .x(function(d) { return formatDate.parse(d.date); }) 
     .y(function(d) { return +d.price; })); 
}); 

而數據的進一步鏈接到<svg>元件內部圖表()函數與數據進行的([數據]):

// Select the svg element, if it exists. 
var svg = d3.select(this).selectAll("svg").data([data]); 

// Otherwise, create the skeletal chart. 
var gEnter = svg.enter().append("svg").append("g"); 
gEnter.append("path").attr("class", "area"); 
gEnter.append("path").attr("class", "line"); 
gEnter.append("g").attr("class", "x axis"); 

在自己answer邁克說,這兩種方法都可以互換,但前者不計算聯接。那麼爲什麼要在這裏使用數據([數據])?

另外,如果已經有一個<svg>元素作爲註釋行的建議,我不會得到什麼結果。對我來說,進入選擇在這種情況下空,沒有進一步的追加將工作...

我一定是誤解的東西...

感謝您的幫助!

回答

0

在第二種情況下使用.data([data])的優點是,如果沒有SVG,則輸入選擇的處理會添加它。如果存在SVG,則代碼完全等同於.datum(data) - 綁定到該元素的數據將發生更改,並且不會發生任何其他情況。