Created
July 12, 2012 16:57
-
-
Save phoebebright/3099307 to your computer and use it in GitHub Desktop.
Change data in place?
This file contains 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
<html> | |
<head> | |
<title>D3 Rescale Example</title> | |
<script src="http://d3js.org/d3.v2.js"></script> | |
<style type="text/css"> | |
.axis path, | |
.axis line { | |
fill: none; | |
stroke: black; | |
shape-rendering: crispEdges; | |
} | |
.axis text { | |
font-family: sans-serif; | |
font-size: 11px; | |
} | |
.lines { | |
fill: none; | |
stroke: black; | |
stroke-width: 1.5px; | |
shape-rendering: crispEdges; | |
} | |
</style> | |
</head> | |
<body> | |
<button id="rescale" onclick="rescale();">Rescale</button></div> | |
<script> | |
var width = 700, // width of svg | |
height = 400, // height of svg | |
padding = 100; // space around the chart, not including labels | |
var data=[{"date":new Date(2012,0,1), "value": 3, 'pct': 55}, | |
{"date":new Date(2012,0,3), "value": 2, "pct": 30 }, | |
{"date":new Date(2012,0,12), "value": 33, "pct": 10}, | |
{"date":new Date(2012,0,21), "value": 13, "pct": 29}, | |
{"date":new Date(2012,0,30), "value": 23, "pct": 22}]; | |
var x_domain = d3.extent(data, function(d) { | |
return d.date; }), | |
y_domain = d3.extent(data, function(d) { return d.value; }); | |
// define the y scale (vertical) | |
var yScale = d3.scale.linear() | |
.domain(y_domain) | |
.range([height - padding, padding]); // map these top and bottom of the chart | |
var xScale = d3.time.scale() | |
.domain(x_domain) | |
.range([padding, width - padding]); // map these sides of the chart, in this case 100 and 600 | |
// define the y axis | |
var yAxis = d3.svg.axis() | |
.orient("left") | |
.scale(yScale); | |
// define the x axis | |
var xAxis = d3.svg.axis() | |
.orient("bottom") | |
.scale(xScale); | |
// create the svg | |
var div = d3.select("body"); | |
div.select("svg").remove(); | |
var vis = div.append("svg") | |
.attr("width", width) | |
.attr("height", height) | |
.attr("transform", "translate(" + padding + "," + padding + ")"); | |
// draw y axis with labels and move in from the size by the amount of padding | |
vis.append("g") | |
.attr("class", "axis yaxis") | |
.attr("transform", "translate("+padding+",0)") | |
.call(yAxis); | |
// draw x axis with labels and move to the bottom of the chart area | |
vis.append("g") | |
.attr("class", "axis") | |
.attr("transform", "translate(0," + (height - padding) + ")") | |
.call(xAxis); | |
// DRAW LINES | |
var line = d3.svg.line() | |
.x(function(d) { | |
return xScale(d.date); }) | |
.y(function(d) { | |
return yScale(d.value); }) | |
.interpolate("basis"); | |
vis.selectAll(".lines") | |
.data([data]) | |
.enter() | |
.append("svg:path") | |
.attr("d", line) | |
.attr("class", "lines"); | |
function rescale() { | |
// change the y axis to show percentage | |
yScale.domain([0,100]) // redraw as percentage outstanding | |
vis.select(".yaxis") | |
.transition().duration(1500).ease("sin-in-out") // https://github.com/mbostock/d3/wiki/Transitions#wiki-d3_ease | |
.call(yAxis); | |
// now redraw the line to use pct | |
line.y(function(d) { | |
return yScale(d.pct); }); | |
vis.selectAll(".lines") | |
.transition() | |
.duration(500) | |
.ease("linear") | |
.attr("d", line); | |
} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment