Skip to content

Instantly share code, notes, and snippets.

@theWhiteFox
Created September 20, 2016 10:54
Show Gist options
  • Select an option

  • Save theWhiteFox/9d6d9c87223d181a9c81df309e7fe058 to your computer and use it in GitHub Desktop.

Select an option

Save theWhiteFox/9d6d9c87223d181a9c81df309e7fe058 to your computer and use it in GitHub Desktop.
D3JS Moving xAxis along with line
<h1>Path Transitions</h1>
<p>This is a working example from: <a href="https://bost.ocks.org/mike/path/">https://bost.ocks.org/mike/path/</a></p>
<p><b>Scroll down to see the graph</b></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum massa in ornare auctor. Nunc tincidunt cursus ipsum ac egestas. Morbi quis mi id leo vulputate vestibulum et nec diam. Duis fringilla mauris in erat vehicula, sed euismod libero scelerisque. Sed eget justo vel lectus aliquet tempus. Integer ut placerat orci. Cras nunc felis, vulputate ac posuere vitae, vestibulum nec diam. Proin molestie, quam ut mattis vehicula, eros elit sodales felis, et viverra ligula massa a nisi. Curabitur condimentum vulputate convallis. Duis aliquam molestie venenatis. Ut feugiat eleifend rutrum. Fusce rutrum sapien at ligula pretium facilisis vel ut diam.</p>
<p>This chart, for example, shows your scrolling activity while reading this document over the last three minutes:</p>
<div class="graph"></div>
(function() {
var n = 243,
duration = 750,
now = new Date(Date.now() - duration),
count = 0,
scrollData = d3.range(n).map(function() { return 0; });
var margin = {top: 6, right: 0, bottom: 20, left: 40},
width = 960 - margin.right,
height = 120 - margin.top - margin.bottom;
var x = d3.time.scale()
.domain([now - (n - 2) * duration, now - duration])
.range([0, width]);
var y = d3.scale.linear()
.range([height, 0]);
var line = d3.svg.line()
.interpolate("basis")
.x(function(d, i) { return x(now - (n - 1 - i) * duration); })
.y(function(d, i) { return y(d); });
var svg = d3.select(".graph").append("p").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.style("margin-left", -margin.left + "px")
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
svg.append("defs").append("clipPath")
.attr("id", "clip")
.append("rect")
.attr("width", width)
.attr("height", height);
var axis = svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(x.axis = d3.svg.axis().scale(x).orient("bottom"));
var path = svg.append("g")
.attr("clip-path", "url(#clip)")
.append("path")
.datum(scrollData)
.attr("class", "line");
var transition = d3.select({}).transition()
.duration(750)
.ease("linear");
d3.select(window)
.on("scroll", function() { ++count; });
(function tick() {
transition = transition.each(function() {
// update the domains
now = new Date();
x.domain([now - (n - 2) * duration, now - duration]);
y.domain([0, d3.max(scrollData)]);
// push the accumulated count onto the back, and reset the count
scrollData.push(Math.min(30, count));
count = 0;
// redraw the line
svg.select(".line")
.attr("d", line)
.attr("transform", null);
// slide the x-axis left
axis.call(x.axis);
// slide the line left
path.transition()
.attr("transform", "translate(" + x(now - (n - 1) * duration) + ")");
// pop the old data point off the front
scrollData.shift();
}).transition().each("start", tick);
})();
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.16/d3.js"></script>
.line{
fill: none;
stroke: #000;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment