Created
July 11, 2011 04:41
-
-
Save ivanteoh/1075321 to your computer and use it in GitHub Desktop.
Scale graph - snippets
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <title>Scale Graph</title> | |
| </head> | |
| <body> | |
| <div id="demoContainer"> | |
| <div id="option"> | |
| <input name="updateButton" type="button" value="Update"/> | |
| </div> | |
| <div id="mainGraph"> | |
| </div> | |
| </div> | |
| <script type="text/javascript" src="http://mbostock.github.com/d3/d3.js?1.27.1"></script> | |
| <script type="text/javascript"> | |
| <!-- Scale graph code here. --> | |
| </script> | |
| </body> | |
| </html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function randomData() { | |
| return d3.range(10).map(function(i) { | |
| return {x: i / 9, y: Math.random()}; | |
| }); | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var data = randomData(); | |
| var newMaxY = d3.max(data, function(d) {return d.y;}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function reDomain(maxValue) { | |
| var dy = Math.pow(10, Math.round(Math.log(maxValue) / Math.log(10)) - 1); | |
| return Math.ceil(maxValue / dy) * dy; | |
| } | |
| var newCeilY = reDomain(newMaxY); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var w = 450, | |
| h = 450, | |
| p = 50, | |
| x = d3.scale.linear().domain([0, 1]).range([0, w]), | |
| y = d3.scale.linear().domain([0, newCeilY]).range([h, 0]); | |
| var chart = d3.select("#mainGraph") | |
| .append("svg:svg") | |
| .attr("width", w + p * 2) | |
| .attr("height", h + p * 2); | |
| var vis = chart.append("svg:g") | |
| .attr("transform", "translate(" + p + "," + p + ")"); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var xrule = vis.selectAll("g.x") | |
| .data(x.ticks(10)) | |
| .enter().append("svg:g") | |
| .attr("class", "x"); | |
| xrule.append("svg:line") | |
| .style("stroke", "#ccc") | |
| .style("shape-rendering", "crispEdges") | |
| .attr("x1", x) | |
| .attr("x2", x) | |
| .attr("y1", 0) | |
| .attr("y2", h); | |
| xrule.append("svg:text") | |
| .attr("x", x) | |
| .attr("y", h + 3) | |
| .attr("dy", ".71em") | |
| .attr("text-anchor", "middle") | |
| .text(x.tickFormat(10)); | |
| var yrule = vis.selectAll("g.y") | |
| .data(y.ticks(10)) | |
| .enter().append("svg:g") | |
| .attr("class", "y"); | |
| yrule.append("svg:line") | |
| .attr("class", "yLine") | |
| .style("stroke", "#ccc") | |
| .style("shape-rendering", "crispEdges") | |
| .attr("x1", 0) | |
| .attr("x2", w) | |
| .attr("y1", y) | |
| .attr("y2", y); | |
| yrule.append("svg:text") | |
| .attr("class", "yText") | |
| .attr("x", -3) | |
| .attr("y", y) | |
| .attr("dy", ".35em") | |
| .attr("text-anchor", "end") | |
| .text(y.tickFormat(10)); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var node = vis.selectAll("path.dot") | |
| .data(data) | |
| .enter().append("svg:path") | |
| .attr("class", "dot") | |
| .style("fill", "white") | |
| .style("stroke-width", "1.5px") | |
| .attr("stroke", "#9acd32") | |
| .attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; }) | |
| .attr("d", d3.svg.symbol()) | |
| .on("mouseover", function(d,i) { | |
| d3.select(this).transition().duration(300).style("fill","#00ffff"); }) | |
| .on("mouseout", function(d,i) { | |
| d3.select(this).transition().duration(300).style("fill","white"); }); | |
| node.append("svg:title") | |
| .attr("class", "dotTitle") | |
| .text(function(d) { return "X: " + d.x.toFixed(3) + ", Y: " + d.y.toFixed(3); }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function updateData() { | |
| var data = randomData(); | |
| var newMaxY = d3.max(data, function(d) {return d.y;}); | |
| var newCeilY = reDomain(newMaxY); | |
| var w = 450, | |
| h = 450, | |
| x = d3.scale.linear().domain([0, 1]).range([0, w]), | |
| y = d3.scale.linear().domain([0, newCeilY]).range([h, 0]); | |
| var vis = d3.select("#mainGraph svg g"); | |
| var yrule = vis.selectAll("g.y") | |
| .data(y.ticks(10)); | |
| // yRule Enter | |
| var newrule = yrule.enter().append("svg:g") | |
| .attr("class", "y"); | |
| newrule.append("svg:line") | |
| .attr("class", "yLine") | |
| .style("stroke", "#ccc") | |
| .style("shape-rendering", "crispEdges") | |
| .attr("x1", 0) | |
| .attr("x2", w) | |
| .attr("y1", 0) | |
| .attr("y2", 0) | |
| .transition() | |
| .duration(2000) | |
| .attr("y1", y) | |
| .attr("y2", y); | |
| newrule.append("svg:text") | |
| .attr("class", "yText") | |
| .attr("x", -3) | |
| .attr("dy", ".35em") | |
| .attr("text-anchor", "end") | |
| .attr("y", 0) | |
| .transition() | |
| .duration(2000) | |
| .attr("y", y) | |
| .text(y.tickFormat(10)); | |
| // yLine Update | |
| yrule.select("line.yLine") | |
| .transition() | |
| .duration(2000) | |
| .attr("y1", y) | |
| .attr("y2", y); | |
| // yText Update | |
| yrule.select("text.yText") | |
| .transition() | |
| .duration(2000) | |
| .attr("y", y) | |
| .text(y.tickFormat(10)); | |
| // yrule Remove | |
| var oldrule = yrule.exit(); | |
| oldrule.select("line.yLine") | |
| .transition() | |
| .duration(2000) | |
| .attr("y1", 0) | |
| .attr("y2", 0) | |
| .remove(); | |
| oldrule.select("text.yText") | |
| .transition() | |
| .duration(2000) | |
| .attr("y", 0) | |
| .remove(); | |
| oldrule.transition() | |
| .duration(2000).remove(); | |
| // Dots | |
| var node = vis.selectAll("path.dot") | |
| .data(data) | |
| .transition() | |
| .duration(2000) | |
| .attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; }); | |
| node.select("title.dotTitle") | |
| .text(function(d) { return "X: " + d.x.toFixed(3) + ", Y: " + d.y.toFixed(3); }); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment