This variation of a line chart demonstrates a sequence of chained transitions. Clicking on the radio buttons changes the displayed metric. First, the line transitions to the new values. Then, the axes rescale to fit the new data.
-
-
Save mbostock/3903818 to your computer and use it in GitHub Desktop.
Chained Transitions
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
license: gpl-3.0 |
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
date | New York | San Francisco | |
---|---|---|---|
20111001 | 63.4 | 62.7 | |
20111002 | 58.0 | 59.9 | |
20111003 | 53.3 | 59.1 | |
20111004 | 55.7 | 58.8 | |
20111005 | 64.2 | 58.7 | |
20111006 | 58.8 | 57.0 | |
20111007 | 57.9 | 56.7 | |
20111008 | 61.8 | 56.8 | |
20111009 | 69.3 | 56.7 | |
20111010 | 71.2 | 60.1 | |
20111011 | 68.7 | 61.1 | |
20111012 | 61.8 | 61.5 | |
20111013 | 63.0 | 64.3 | |
20111014 | 66.9 | 67.1 | |
20111015 | 61.7 | 64.6 | |
20111016 | 61.8 | 61.6 | |
20111017 | 62.8 | 61.1 | |
20111018 | 60.8 | 59.2 | |
20111019 | 62.1 | 58.9 | |
20111020 | 65.1 | 57.2 | |
20111021 | 55.6 | 56.4 | |
20111022 | 54.4 | 60.7 | |
20111023 | 54.4 | 65.1 | |
20111024 | 54.8 | 60.9 | |
20111025 | 57.9 | 56.1 | |
20111026 | 54.6 | 54.6 | |
20111027 | 54.4 | 56.1 | |
20111028 | 42.5 | 58.1 | |
20111029 | 40.9 | 57.5 | |
20111030 | 38.6 | 57.7 | |
20111031 | 44.2 | 55.1 | |
20111101 | 49.6 | 57.9 | |
20111102 | 47.2 | 64.6 | |
20111103 | 50.1 | 56.2 | |
20111104 | 50.1 | 50.5 | |
20111105 | 43.5 | 51.3 | |
20111106 | 43.8 | 52.6 | |
20111107 | 48.9 | 51.4 | |
20111108 | 55.5 | 50.6 | |
20111109 | 53.7 | 54.6 | |
20111110 | 57.7 | 55.6 | |
20111111 | 48.5 | 53.9 | |
20111112 | 46.8 | 54.0 | |
20111113 | 51.1 | 53.8 | |
20111114 | 56.8 | 53.5 | |
20111115 | 59.7 | 53.4 | |
20111116 | 56.5 | 52.2 | |
20111117 | 49.6 | 52.7 | |
20111118 | 41.5 | 53.1 | |
20111119 | 44.3 | 49.0 | |
20111120 | 54.0 | 50.4 | |
20111121 | 54.1 | 51.1 | |
20111122 | 49.4 | 52.3 | |
20111123 | 50.0 | 54.6 | |
20111124 | 44.0 | 55.1 | |
20111125 | 50.3 | 51.5 | |
20111126 | 52.1 | 53.6 | |
20111127 | 49.6 | 52.3 | |
20111128 | 57.2 | 51.0 | |
20111129 | 59.1 | 49.5 | |
20111130 | 50.6 | 49.8 | |
20111201 | 44.3 | 60.4 | |
20111202 | 43.9 | 62.2 | |
20111203 | 42.1 | 58.3 | |
20111204 | 43.9 | 52.7 | |
20111205 | 50.2 | 51.5 | |
20111206 | 54.2 | 49.9 | |
20111207 | 54.6 | 48.6 | |
20111208 | 43.4 | 46.4 | |
20111209 | 42.2 | 49.8 | |
20111210 | 45.0 | 52.1 | |
20111211 | 33.8 | 48.8 | |
20111212 | 36.8 | 47.4 | |
20111213 | 38.6 | 47.2 | |
20111214 | 41.9 | 46.1 | |
20111215 | 49.6 | 48.8 | |
20111216 | 50.2 | 47.9 | |
20111217 | 40.6 | 49.8 | |
20111218 | 29.1 | 49.1 | |
20111219 | 33.7 | 48.3 | |
20111220 | 45.8 | 49.3 | |
20111221 | 47.4 | 48.4 | |
20111222 | 54.4 | 53.3 | |
20111223 | 47.8 | 47.5 | |
20111224 | 34.9 | 47.9 | |
20111225 | 35.9 | 48.9 | |
20111226 | 43.6 | 45.9 | |
20111227 | 42.9 | 47.2 | |
20111228 | 46.2 | 48.9 | |
20111229 | 30.8 | 50.9 | |
20111230 | 40.8 | 52.9 | |
20111231 | 49.8 | 50.1 | |
20120101 | 46.3 | 53.9 | |
20120102 | 43.2 | 53.1 | |
20120103 | 30.3 | 49.7 | |
20120104 | 19.2 | 52.7 | |
20120105 | 32.1 | 52.6 | |
20120106 | 41.2 | 49.0 | |
20120107 | 47.0 | 51.0 | |
20120108 | 46.0 | 56.8 | |
20120109 | 34.7 | 52.3 | |
20120110 | 39.4 | 51.6 | |
20120111 | 40.4 | 49.8 | |
20120112 | 45.4 | 51.9 | |
20120113 | 40.7 | 53.7 | |
20120114 | 30.4 | 52.9 | |
20120115 | 23.9 | 49.7 | |
20120116 | 22.6 | 45.3 | |
20120117 | 39.8 | 43.6 | |
20120118 | 43.2 | 45.0 | |
20120119 | 26.3 | 47.3 | |
20120120 | 32.8 | 51.4 | |
20120121 | 27.4 | 53.7 | |
20120122 | 25.0 | 48.3 | |
20120123 | 39.4 | 52.9 | |
20120124 | 48.7 | 49.1 | |
20120125 | 43.0 | 52.1 | |
20120126 | 37.1 | 53.6 | |
20120127 | 48.2 | 50.4 | |
20120128 | 43.7 | 50.3 | |
20120129 | 40.1 | 53.8 | |
20120130 | 38.0 | 51.9 | |
20120131 | 43.5 | 50.0 | |
20120201 | 50.4 | 50.0 | |
20120202 | 45.8 | 51.3 | |
20120203 | 37.5 | 51.5 | |
20120204 | 40.8 | 52.0 | |
20120205 | 36.5 | 53.8 | |
20120206 | 39.1 | 54.6 | |
20120207 | 43.2 | 54.3 | |
20120208 | 36.5 | 51.9 | |
20120209 | 36.5 | 53.8 | |
20120210 | 38.3 | 53.9 | |
20120211 | 36.9 | 52.3 | |
20120212 | 29.7 | 50.1 | |
20120213 | 33.1 | 49.5 | |
20120214 | 39.6 | 48.6 | |
20120215 | 42.3 | 49.9 | |
20120216 | 39.7 | 52.4 | |
20120217 | 46.0 | 49.9 | |
20120218 | 41.2 | 51.6 | |
20120219 | 39.8 | 47.8 | |
20120220 | 38.1 | 48.7 | |
20120221 | 37.1 | 49.7 | |
20120222 | 45.5 | 53.4 | |
20120223 | 50.6 | 54.1 | |
20120224 | 42.7 | 55.9 | |
20120225 | 42.6 | 51.7 | |
20120226 | 36.9 | 47.7 | |
20120227 | 40.9 | 45.4 | |
20120228 | 45.9 | 47.0 | |
20120229 | 40.7 | 49.8 | |
20120301 | 41.3 | 48.9 | |
20120302 | 36.8 | 48.1 | |
20120303 | 47.6 | 50.7 | |
20120304 | 44.2 | 55.0 | |
20120305 | 38.5 | 48.8 | |
20120306 | 32.9 | 48.4 | |
20120307 | 43.3 | 49.9 | |
20120308 | 51.2 | 49.2 | |
20120309 | 47.8 | 51.7 | |
20120310 | 37.2 | 49.3 | |
20120311 | 42.9 | 50.0 | |
20120312 | 48.8 | 48.6 | |
20120313 | 52.6 | 53.9 | |
20120314 | 60.5 | 55.2 | |
20120315 | 47.2 | 55.9 | |
20120316 | 44.7 | 54.6 | |
20120317 | 48.2 | 48.2 | |
20120318 | 48.2 | 47.1 | |
20120319 | 53.1 | 45.8 | |
20120320 | 57.8 | 49.7 | |
20120321 | 57.5 | 51.4 | |
20120322 | 57.3 | 51.4 | |
20120323 | 61.7 | 48.4 | |
20120324 | 55.8 | 49.0 | |
20120325 | 48.4 | 46.4 | |
20120326 | 49.8 | 49.7 | |
20120327 | 39.6 | 54.1 | |
20120328 | 49.7 | 54.6 | |
20120329 | 56.8 | 52.3 | |
20120330 | 46.5 | 54.5 | |
20120331 | 42.2 | 56.2 | |
20120401 | 45.3 | 51.1 | |
20120402 | 48.1 | 50.5 | |
20120403 | 51.2 | 52.2 | |
20120404 | 61.0 | 50.6 | |
20120405 | 50.7 | 47.9 | |
20120406 | 48.0 | 47.4 | |
20120407 | 51.1 | 49.4 | |
20120408 | 55.7 | 50.0 | |
20120409 | 58.3 | 51.3 | |
20120410 | 55.0 | 53.8 | |
20120411 | 49.0 | 52.9 | |
20120412 | 51.7 | 53.9 | |
20120413 | 53.1 | 50.2 | |
20120414 | 55.2 | 50.9 | |
20120415 | 62.3 | 51.5 | |
20120416 | 62.9 | 51.9 | |
20120417 | 69.3 | 53.2 | |
20120418 | 59.0 | 53.0 | |
20120419 | 54.1 | 55.1 | |
20120420 | 56.5 | 55.8 | |
20120421 | 58.2 | 58.0 | |
20120422 | 52.4 | 52.8 | |
20120423 | 51.6 | 55.1 | |
20120424 | 49.3 | 57.9 | |
20120425 | 52.5 | 57.5 | |
20120426 | 50.5 | 55.3 | |
20120427 | 51.9 | 53.5 | |
20120428 | 47.4 | 54.7 | |
20120429 | 54.1 | 54.0 | |
20120430 | 51.9 | 53.4 | |
20120501 | 57.4 | 52.7 | |
20120502 | 53.7 | 50.7 | |
20120503 | 53.1 | 52.6 | |
20120504 | 57.2 | 53.4 | |
20120505 | 57.0 | 53.1 | |
20120506 | 56.6 | 56.5 | |
20120507 | 54.6 | 55.3 | |
20120508 | 57.9 | 52.0 | |
20120509 | 59.2 | 52.4 | |
20120510 | 61.1 | 53.4 | |
20120511 | 59.7 | 53.1 | |
20120512 | 64.1 | 49.9 | |
20120513 | 65.3 | 52.0 | |
20120514 | 64.2 | 56.0 | |
20120515 | 62.0 | 53.0 | |
20120516 | 63.8 | 51.0 | |
20120517 | 64.5 | 51.4 | |
20120518 | 61.0 | 52.2 | |
20120519 | 62.6 | 52.4 | |
20120520 | 66.2 | 54.5 | |
20120521 | 62.7 | 52.8 | |
20120522 | 63.7 | 53.9 | |
20120523 | 66.4 | 56.5 | |
20120524 | 64.5 | 54.7 | |
20120525 | 65.4 | 52.5 | |
20120526 | 69.4 | 52.1 | |
20120527 | 71.9 | 52.2 | |
20120528 | 74.4 | 52.9 | |
20120529 | 75.9 | 52.1 | |
20120530 | 72.9 | 52.1 | |
20120531 | 72.5 | 53.3 | |
20120601 | 67.2 | 54.8 | |
20120602 | 68.3 | 54.0 | |
20120603 | 67.7 | 52.3 | |
20120604 | 61.9 | 55.3 | |
20120605 | 58.3 | 53.5 | |
20120606 | 61.7 | 54.1 | |
20120607 | 66.7 | 53.9 | |
20120608 | 68.7 | 54.4 | |
20120609 | 72.2 | 55.0 | |
20120610 | 72.6 | 60.0 | |
20120611 | 69.2 | 57.2 | |
20120612 | 66.9 | 55.1 | |
20120613 | 66.7 | 53.3 | |
20120614 | 67.7 | 53.4 | |
20120615 | 68.5 | 54.6 | |
20120616 | 67.5 | 57.0 | |
20120617 | 64.2 | 55.6 | |
20120618 | 61.7 | 52.5 | |
20120619 | 66.4 | 53.9 | |
20120620 | 77.9 | 55.3 | |
20120621 | 88.3 | 53.3 | |
20120622 | 82.2 | 54.1 | |
20120623 | 77.0 | 55.2 | |
20120624 | 75.4 | 55.8 | |
20120625 | 70.9 | 56.8 | |
20120626 | 65.9 | 57.5 | |
20120627 | 73.5 | 57.7 | |
20120628 | 77.4 | 56.6 | |
20120629 | 79.6 | 56.4 | |
20120630 | 84.2 | 58.4 | |
20120701 | 81.8 | 58.8 | |
20120702 | 82.5 | 56.4 | |
20120703 | 80.2 | 56.5 | |
20120704 | 77.8 | 55.8 | |
20120705 | 86.1 | 54.8 | |
20120706 | 79.9 | 54.9 | |
20120707 | 83.5 | 54.7 | |
20120708 | 81.5 | 52.8 | |
20120709 | 77.8 | 53.7 | |
20120710 | 76.1 | 53.1 | |
20120711 | 76.3 | 52.7 | |
20120712 | 75.8 | 52.0 | |
20120713 | 77.2 | 53.4 | |
20120714 | 79.3 | 54.0 | |
20120715 | 78.9 | 54.0 | |
20120716 | 79.6 | 54.5 | |
20120717 | 83.3 | 56.7 | |
20120718 | 84.3 | 57.5 | |
20120719 | 75.1 | 57.1 | |
20120720 | 68.4 | 58.1 | |
20120721 | 68.4 | 57.6 | |
20120722 | 72.2 | 56.0 | |
20120723 | 75.6 | 56.6 | |
20120724 | 82.6 | 57.8 | |
20120725 | 78.4 | 57.5 | |
20120726 | 77.0 | 56.4 | |
20120727 | 79.4 | 55.3 | |
20120728 | 77.4 | 55.0 | |
20120729 | 72.5 | 55.6 | |
20120730 | 72.9 | 55.6 | |
20120731 | 73.6 | 55.9 | |
20120801 | 75.0 | 55.4 | |
20120802 | 77.7 | 54.4 | |
20120803 | 79.7 | 53.7 | |
20120804 | 79.6 | 54.1 | |
20120805 | 81.5 | 57.8 | |
20120806 | 80.0 | 58.2 | |
20120807 | 75.7 | 58.0 | |
20120808 | 77.8 | 57.0 | |
20120809 | 78.6 | 55.0 | |
20120810 | 77.8 | 54.8 | |
20120811 | 78.5 | 53.0 | |
20120812 | 78.8 | 52.5 | |
20120813 | 78.6 | 53.3 | |
20120814 | 76.8 | 53.9 | |
20120815 | 76.7 | 56.2 | |
20120816 | 75.9 | 57.1 | |
20120817 | 77.6 | 55.3 | |
20120818 | 72.6 | 56.2 | |
20120819 | 70.4 | 54.3 | |
20120820 | 71.8 | 53.1 | |
20120821 | 73.6 | 53.4 | |
20120822 | 74.7 | 54.5 | |
20120823 | 74.6 | 55.7 | |
20120824 | 76.0 | 54.8 | |
20120825 | 76.2 | 53.8 | |
20120826 | 73.4 | 56.5 | |
20120827 | 74.6 | 58.3 | |
20120828 | 79.4 | 58.7 | |
20120829 | 74.7 | 57.5 | |
20120830 | 73.5 | 55.9 | |
20120831 | 77.9 | 55.4 | |
20120901 | 80.7 | 55.7 | |
20120902 | 75.1 | 53.1 | |
20120903 | 73.5 | 53.5 | |
20120904 | 73.5 | 52.5 | |
20120905 | 77.7 | 54.5 | |
20120906 | 74.2 | 56.3 | |
20120907 | 76.0 | 56.4 | |
20120908 | 77.1 | 56.5 | |
20120909 | 69.7 | 56.4 | |
20120910 | 67.8 | 55.4 | |
20120911 | 64.0 | 56.2 | |
20120912 | 68.1 | 55.7 | |
20120913 | 69.3 | 54.3 | |
20120914 | 70.0 | 55.2 | |
20120915 | 69.3 | 54.3 | |
20120916 | 66.3 | 52.9 | |
20120917 | 67.0 | 54.8 | |
20120918 | 72.8 | 54.8 | |
20120919 | 67.2 | 56.8 | |
20120920 | 62.1 | 55.4 | |
20120921 | 64.0 | 55.8 | |
20120922 | 65.5 | 55.9 | |
20120923 | 65.7 | 52.8 | |
20120924 | 60.4 | 54.5 | |
20120925 | 63.2 | 53.3 | |
20120926 | 68.5 | 53.6 | |
20120927 | 69.2 | 52.1 | |
20120928 | 68.7 | 52.6 | |
20120929 | 62.5 | 53.9 | |
20120930 | 62.3 | 55.1 |
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
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<style> | |
body { | |
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | |
margin: auto; | |
position: relative; | |
width: 960px; | |
} | |
text { | |
font: 10px sans-serif; | |
} | |
.axis path, | |
.axis line { | |
fill: none; | |
stroke: #000; | |
shape-rendering: crispEdges; | |
} | |
.x.axis path { | |
display: none; | |
} | |
.line { | |
fill: none; | |
stroke: steelblue; | |
stroke-width: 1.5px; | |
} | |
form { | |
position: absolute; | |
right: 10px; | |
top: 10px; | |
} | |
</style> | |
<form> | |
<label><input type="radio" name="city" value="New York" checked> New York</label> | |
<label><input type="radio" name="city" value="San Francisco"> San Francisco</label> | |
</form> | |
<script src="//d3js.org/d3.v3.min.js"></script> | |
<script> | |
var margin = {top: 20, right: 80, bottom: 30, left: 50}, | |
width = 960 - margin.left - margin.right, | |
height = 500 - margin.top - margin.bottom; | |
var city = "New York", | |
parseDate = d3.time.format("%Y%m%d").parse; | |
var x = d3.time.scale() | |
.range([0, width]); | |
var y = d3.scale.linear() | |
.range([height, 0]); | |
var xAxis = d3.svg.axis() | |
.scale(x) | |
.orient("bottom"); | |
var yAxis = d3.svg.axis() | |
.scale(y) | |
.orient("left"); | |
var line = d3.svg.line() | |
.interpolate("basis") | |
.x(function(d) { return x(d.date); }) | |
.y(function(d) { return y(d[city]); }); | |
var svg = d3.select("body").append("svg") | |
.attr("width", width + margin.left + margin.right) | |
.attr("height", height + margin.top + margin.bottom) | |
.append("g") | |
.attr("transform", "translate(" + margin.left + "," + margin.top + ")"); | |
d3.tsv("data.tsv", function(error, data) { | |
if (error) throw error; | |
data.forEach(function(d) { | |
d.date = parseDate(d.date); | |
d["New York"] = +d["New York"]; | |
d["San Francisco"] = +d["San Francisco"]; | |
}); | |
x.domain([data[0].date, data[data.length - 1].date]); | |
y.domain(d3.extent(data, function(d) { return d[city]; })); | |
svg.append("g") | |
.attr("class", "x axis") | |
.attr("transform", "translate(0," + height + ")") | |
.call(xAxis); | |
svg.append("g") | |
.attr("class", "y axis") | |
.call(yAxis) | |
.append("text") | |
.attr("transform", "rotate(-90)") | |
.attr("y", 6) | |
.attr("dy", ".71em") | |
.style("text-anchor", "end") | |
.text("Temperature (ºF)"); | |
svg.append("path") | |
.datum(data) | |
.attr("class", "line") | |
.attr("d", line); | |
svg.append("text") | |
.datum(data[data.length - 1]) | |
.attr("class", "label") | |
.attr("transform", transform) | |
.attr("x", 3) | |
.attr("dy", ".35em") | |
.text(city); | |
d3.selectAll("input").on("change", change); | |
var timeout = setTimeout(function() { | |
d3.select("input[value=\"San Francisco\"]").property("checked", true).each(change); | |
}, 2000); | |
function change() { | |
clearTimeout(timeout); | |
city = this.value; | |
// First transition the line & label to the new city. | |
var t0 = svg.transition().duration(750); | |
t0.selectAll(".line").attr("d", line); | |
t0.selectAll(".label").attr("transform", transform).text(city); | |
// Then transition the y-axis. | |
y.domain(d3.extent(data, function(d) { return d[city]; })); | |
var t1 = t0.transition(); | |
t1.selectAll(".line").attr("d", line); | |
t1.selectAll(".label").attr("transform", transform); | |
t1.selectAll(".y.axis").call(yAxis); | |
} | |
function transform(d) { | |
return "translate(" + x(d.date) + "," + y(d[city]) + ")"; | |
} | |
}); | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment