This post is the short notes about D3.js (Data Driven Documents) framework, It is a JavaScript framework mainly used to generate charts using HTML, DOM, Canvas and SVG. Reference: https://github.com/mbostock/d3/wiki/API-Reference
Select, Append, Text:
<script src="http://d3js.org/d3.v3.min.js"></script> <script> d3.select("body") .append("p") .style("color","red") .attr("allign","center") .text("Hello World"); </script>
Basic SVG Shape:
var canvas=d3.select("body") .append("svg") .attr("width",500) .attr("height",500); var circle = canvas.append("circle") .attr("cx",250) .attr("cy",250) .attr("r", 50) .attr("fill","red"); var rect = canvas.append("rect") .attr("width",100) .attr("heiht",59); var line = canvas.append("line") .attr("x1",0) .attr("y1",100) .attr("x2",400) .attr("y2",400) .attr("stroke","green") .attr("stroke-width",10);
Visualizing Data:
var dateArray = [20, 40, 50]; var canvas = d3.select("body") .append("svg") .attr("width",500) .attr("height",500); var bars = canvas.selectAll("rect") .data(dateArray) .enter() .append("rect") .attr("width",function(d){ return d * 10; }) .attr("height",50) .attr("y",function(d, i){ return i * 50 });
Scales:
var width = 500; var height = 500; var widthscale = d3.scale.linear() .domain([0,60]) .range([0, width]); var color = d3.scale.linear() .domain([0,40]) .range([red,blue]); var dateArray = [20, 40, 50]; var canvas = d3.select("body") .append("svg") .attr("width",500) .attr("height",500); var bars = canvas.selectAll("rect") .data(dateArray) .enter() .append("rect") .attr("width",function(d){ return widthscale(d); }) .attr("height",50) .attr("file", function(id){ return color(id}) .attr("y",function(d, i){ return i * 50 });
Groups and Axes:
var axis = d3.svg.axis() .ticks(5) .scale(widthscale); var canvas = d3.select("body") .append("svg") .attr("width",500) .attr("height",500) .append("g") .attr("transform","translate(20,0)") .call(axis); canvas.append("g") .attr("transform","translate(0,400)") .call(axis);
Enter, Update, Exit:
Dom elements < data elements(enter) Dom elements > data elements(exit) Dom elements = data elements(update) var data = [10,20]; var canvas = d3.select("body") .append("svg") .attr("width",500) .attr("height",500); var circle = canvas.append("circle") .attr("cx", 50) .attr("cy", 50) .attr("r",25); var circle = canvas.selectAll("circle") .data(data) .attr("file","red") .enter() .append("circle") .attr("cx", 50) .attr("cy", 50) .attr("r",25) .attr("color","green");
Transitions:
var canvas = d3.select("body") .append("svg") .attr("width",500) .attr("height",500); var circle = canvas.append("circle") .attr("cx", 50) .attr("cy", 50) .attr("r",25); circle.transition() .duration(1500) .delay(2000) .attr("cx",150) .transition() .attr("cy",150) .each("end",function(){ d3.select(this).attr("fill","red"); });
Loading External Data:
mydata.json file : {{"name":"harish","age",25},{"name":"chitra","age":22},{"name":"Kutty","age":23}} d3.json("mydata.json",function(data){ var canvas = d3.select("body").append("svg") .attr("width",500) .attr("height",500); canvas.selectAll("rect") .deta(data) .enter() .append("rect") .attr("width", function(d{ return d.age * 10; }) .attr("height",48) .attr("y",function(d,i){ return i*50; }) .attr("fill",""blue); canvas.select("text") .data(data) .enter() .append("text") .attr("fill","white) .attr("y",function(d,i){ return i*50; }) .text(function(d){ return d.name; }); }) })mydata.csv
"name","age" "Harish",25 "Chitra",22 "Kutty",23
Paths:
var canvas = d3.select("body").append("svg") .attr("width",500) .attr("height",500); var data =[ {x:10, y:20}, {x:40, y:60}, {x:50, y:70}, ]; var group = canvas.append("g") .attr("transform","translate(100,100)"); var line = d3.svg.line() .x(function(d){ return d.x; }) .y(function(d){ return d.y; }; group.selectAll("path") .data(data) .enter() .append("path") .attr("d", line) .attr("fill","none") .attr("stroke","#000") .attr("stroke-width",10);
Arcs(Donut chart):
var data = [10,20,30]; var r = 300; var color = d3.scale.ordinal() .range(["red","blue","orange"]) var canvas = d3.select("body").append("svg") .attr("width",500) .attr("height",500); var group = canvas.append("g") .attr("transform","translate(100,100)"); var arc = d3.svg.arc() .innnerRadius(r-100)//innnerRadius(0) for piechart .outerRadius(r) var pie = d3.layout.pie() value(function(d){ return d; }); var arcs = group.selectAll("arc") .data(pie(data)) .enter() .append("g") .attr("class","arc"); arcs.append("path") .attr("d",arc) .attr("fill", function(d){ return color(d.data); }); arcs.append("text") .attr("transform", function(d){ return "translate("+arc.centroid(d) +")"; }) .attr("text-anchor","middle") .attr("font-size",1.5em); .text(function(d){ return d.data; });
Tree Layout:
{ "name":"Shanmugam", "children" : [ { "name":"Harish", "children":[ {"name":"a"}, {"name","b"}, {"name","c"} ] }, { "name":"chitra", "children":[ {"name":"y"}, {"name","z"} ] } ] }
Just diagonal curve :
var canvas = d3.select("body").append("svg") .attr("width",500) .attr("height",500); var diagonal = d3.svg.diagonal() .source({x:10, y:10}) .target({x:300,y:300}; canvas.append("path") .attr("file","none") .attr("stroke","black") .attr("d", diagonal);Full:
var canvas = d3.select("body").append("svg") .attr("width",500) .attr("height",500) .append("g") .attr("transform","translate(50,50)"); var tree = d3.layout.tree() .size([400,400]); d3.json("mydata.json", function(data){ var nodes = tree.nodes(data); var links = tree.links(nodes); var node = canvas.selectAll(.node) .data(nodes) .enter() .append("g") .attr("class","node") .attr("transform", funnction (d){ return "translate(" + d.x +", "+ d.y + ")"; }) node.append("circle") .attr("r",5) .attr("fill","blue"); node.append("text") .text(function(d){ return d.name; }); var diagonal = d3.svg.diagonal(); //.projection(function (d) { reutrn [d.x, d.y]}); canvas.selectAll(".link") .data(links) .enter() .append("path") .attr("class","link") .attr("fill","none") .attr("stroke","#ADADAD") .attr("d", diagonal); })
Cluster Pack Bubble Layouts:
var canvas = d3.select("body").append("svg") .attr("width",500) .attr("height",500) .append("g") .attr("transform","translate(50,50)"); var pack = d3.layout.pack() .size([width, height-50]) .padding(10); d3.json("mydata.json", function(data){ var nodes = pack.nodes(data); var node = canvas.selectAll(".node") .data(nodes) .enter() .append("g") .attr("class","node") .attr("transform", function(d){ return "translate[" + d.x+ ","+d.y +")"; }) node.append("circle") .attr("r",function(d){ return d.r; }) .attr("stroke","#ADADAD") .attr("stroke-width", 5); node.apppend("text") .text(function(d){ return d.childer ? "" : d.name; }) }); });
Histogram:
var width = 500, height = 500, padding= 50; d3.csv("ages.csv",function(data){ var map = data.map(function(i){ return parseInt(i.age); }) var histgram = d3.layout.histogram() .bins(7)(map) var y = d3.scale.linear() .domain([0, d3.max[histogram.data(function(i){return i.length;})]) .range([0, height]); var x = d3.scale.linear() .domain([0,d3.max(map)]) .range([0,width]) var xAxis = d3.svg.axis() .scale(x) .orient("bottom"); var canvas = d3.select("body").append("svg") .attr("width",500) .attr("height",500); var group = canvas.append("g") .attr("transform","translate[20,0]") var bars = canvas.selectAll(".bar") .data(histogram) .enter() .append("g") bars.append("rect") .attr("x", function(d){ return d.x * 5; }) .attr("y", 0) .attr("width", function(d){ return d.dx * 5; }) .attr("height", function(d){ return d.dy *5; }) .attr("fill","blue") bars.append("text") .attr("x", function(d){ return x[d.x}) .attr("y", function(d){ return 500 - y[d.y];}) .attr("dy",200px) .attr("fill", green) .attr("text-anchour","middle") .text(function(d){return d.y;}) });
Comments
Post a Comment