[D3] 基本運用

程式語言:Javascript
Library:D3

D3 官網

功能:利用 SVG 表現資料

  1. <script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
  2. <script>
  3. var svg = d3.select(selector).append("svg")
  4. .attr("width", this.width)
  5. .attr("height", this.height)
  6.  
  7. svg.selectAll("circle")
  8. .data(data)
  9. .enter().append("circle")
  10. .attr("cx", function(d) { return d.x; })
  11. .attr("cy", function(d) { return d.y; })
  12. .attr("r", 2.5);
  13. </script>
Elements Data Exit Update Enter Layer 1

d3.select(selector)

同 css,也可丟入 function
實際原理做法詳解
  1. <script>
  2. d3.select("body").selectAll("p")
  3.  
  4. //selection.filter(function(d, i) { return i % 2 === 1; });
  5. selection.select(function(d, i) { return i % 2 === 1 ? this : null; });
  6. </script>

selection.data([values[, key]])

更新 data 跟 element 做連結,且 element 增加一個 property "__data__" 放置 data
三種狀態,如上圖
  • update:已跟 data 做連結的 element 
  • enter:未跟 data 做連結的 element 
  • exit:多出來的 element
  1. <script>
  2. var data = [1,2,3,4]
  3. var circle = svg.selectAll("circle")
  4. .data(data);
  5. var circle_key = svg.selectAll("circle")
  6. .data(data, function(d) { return d; }); 
  7. </script>
  1. <script>
  2. document.body.__data__ = 42;
  3. d3.select('body').datum() // get 42
  4. </script>

selection.enter()

只適用 update selection,例: selection.data 的 回傳值
  1. <script>
  2. circle.enter().append("circle")
  3. .attr("r", 2.5); 
  4. </script>

selection.exit()

只適用 update selection,例: selection.data 的 回傳值
  1. <script>
  2. circle.exit().remove(); 
  3. </script>

selection.datum([value])

類似 data,但不做更新,只處理現有的 data
source code 如下
  1. <script>
  2. d3.selection.prototype.datum = function(value) {
  3. return arguments.length < 1
  4. ? this.property("__data__")
  5. : this.property("__data__", value);
  6. };
  7. </script>

selection.classed(name[, value])

selection.style(name[, value[, priority]])

  1. <script>
  2. selection.classed('foo bar', true);
  3. selection.style({stroke: "black", "stroke-width": "2px"});
  4. </script>

selection.transition([name])

transition.delay([delay])

transition.duration([duration])

transition.ease([value[, arguments]])

參考網站
過渡各種變化使用,搭配
  • delay (延遲 ms) 
  • duration (持續 ms) 
  • ease (如何變化)
  1. <script>
  2. d3.selectAll("circle").transition()
  3. .duration(750)
  4. .delay(function(d, i) { return i * 10; })
  5. .attr("r", function(d) { return Math.sqrt(d * scale); });
  6. </script>

selection.call(function[, arguments…])

用在重覆利用
  1. <script>
  2. function foo(selection) {
  3. selection
  4. .attr("name1", "value1")
  5. .attr("name2", "value2");
  6. }
  7.  
  8. foo(d3.selectAll("div"));
  9. // Or
  10. d3.selectAll("div").call(foo);
  11. </script>

留言