2014-09-30 103 views
4

如何通過更改文件d3訪問來按需更新數據?例如,通過點擊,它將從新的數據文件中讀取數據,併爲AJAX等圖形添加更多節點。D3:如何通過更改數據文件源來動態刷新圖形?

我使用d3.tsv來讀取data.tsv,這是相同格式的許多文件之一。

我做了一個簡單的圖來說明我的問題。提前致謝。

<script src="http://d3js.org/d3.v3.min.js"></script> 
<script> 
    var width = 400, 
     height = 200; 

    var x = d3.scale.linear().range([0, width]), 
     y = d3.scale.linear().range([height, 0]); 

    var svg = d3.select("body") 
     .append("svg") 
     .attr("width", width) 
     .attr("height", height); 

    d3.tsv("data.tsv", function(error, data) { 
     if (error) console.warn(error); 
     x.domain(d3.extent(data, function(q) {return q.xCoord;})); 
     y.domain(d3.extent(data, function(q) {return q.yCoord;})); 

     svg.selectAll(".dot") 
      .data(data) 
      .enter().append("circle") 
       .attr("r", 10) 
       .attr("cx", function(d) { return x(d.xCoord); }) 
       .attr("cy", function(d) { return y(d.yCoord); }) 
    }); 
</script> 
<a href="#">update the graph</a> 
+0

看看本教程:http://bost.ocks.org/mike/circles/或者在「常規更新模式」教程中。 – 2014-09-30 19:30:16

+0

我讀過,但沒有解決讀取新數據文件的問題。 – ngungo 2014-09-30 19:50:46

+0

將更新調用中的文件路徑分配給變量。在更新時更改變量路徑。 – 2014-09-30 19:55:03

回答

4

試試這個。

var width = 400, 
     height = 200; 

    var x = d3.scale.linear().range([0, width]), 
     y = d3.scale.linear().range([height, 0]); 

    var svg = d3.select("body") 
     .append("svg") 
     .attr("width", width) 
     .attr("height", height); 

var dataSource = 'data.tsv', 
dataSource2 = 'data2.tsv'; 

function updateChart(sourcefile) { 

    d3.tsv(sourcefile, function(error, data) { 
     if (error) console.warn(error); 
     x.domain(d3.extent(data, function(q) {return q.xCoord;})); 
     y.domain(d3.extent(data, function(q) {return q.yCoord;})); 

     svg.selectAll(".dot") 
      .data(data) 
      .enter().append("circle") 
       .attr("r", 10) 
       .attr("cx", function(d) { return x(d.xCoord); }) 
       .attr("cy", function(d) { return y(d.yCoord); }) 
    }); 
} 

updateChart(dataSource); 

//here is where you change the data.. 
d3.select(#button).on("click", function() { 
updateChart(dataSource2) 
}) 
+0

明白了!謝謝。 – ngungo 2014-09-30 23:16:16

+0

d3.csv只是一個函數(一個對象)。所以你可以給它更多的功能。 – 2014-09-30 23:54:26