Skip to content

Instantly share code, notes, and snippets.

View sathomas's full-sized avatar

Stephen A Thomas sathomas

View GitHub Profile
@sathomas
sathomas / README.md
Last active August 27, 2016 23:11
Variations on a Random Walk

Can seemingly trivial differences at a small scale have noticeable effects at larger scales? Certainly, as we've learned from chaos theory. This visualization considers another perspective on the same question. It shows the results of three variations of a random walk. The difference between the variations might seem insignificant, yet the resulting large-scale behavior is not at all the same.

@sathomas
sathomas / README.md
Last active December 12, 2016 19:51
Jazz Connections

This graph shows the top 25 jazz albums of all time (at least according to one blogger.) Links between the albums represent musicians that played on both. Click on the nodes and the links for more information.

Note: iTunes links are not affiliate links.

This visualization is a real application of the D3.js force layout. It demonstrates some of the principles in a series on that layout. You can review that series beginning with the first example.

@sathomas
sathomas / README.md
Last active January 31, 2017 22:19
Understanding D3.js Force Layout - 1: The Simplest Possible Graph

This is part of a series of examples that describe the basic operation of the D3.js force layout. Eventually they may end up in a blog post that wraps everything together.

The first example creates the simplest possible graph using a force layout. The comments in the code walk through the steps in creating a force directed graph.

Things start to get more interesting in the next example.

@sathomas
sathomas / README.md
Last active July 23, 2017 15:19
Understanding D3.js Force Layout - 7: linkStrength

This is part of a series of examples that describe the basic operation of the D3.js force layout. Eventually they may end up in a blog post that wraps everything together. If you missed the beginning of the series, here's a link to first example.

An earlier example introduced linkDistance as a key parameter for force layouts. It sets the desired distance between any connected nodes. The force layout includes an additional parameter that serves to modify the

@sathomas
sathomas / README.md
Last active October 19, 2017 06:08
Understanding D3.js Force Layout - 3: Seeing a Layout in Action

This is part of a series of examples that describe the basic operation of the D3.js force layout. Eventually they may end up in a blog post that wraps everything together. If you missed the beginning of the series, here's a link to first example.

Before digging into the properties and options of the force layout, it's helpful to understand how the layout works more generally. And although there's some serious mathematics going on under the hood, the principle is pretty simple: The layout moves the graph nodes around a little bit

@sathomas
sathomas / README.md
Last active February 23, 2018 23:05
Understanding D3.js Force Layout - 9: friction

This is part of a series of examples that describe the basic operation of the D3.js force layout. Eventually they may end up in a blog post that wraps everything together. If you missed the beginning of the series, here's a link to first example.

The final parameter this series considers is friction. This parameter, which ranges from 0 to 1, tells D3.js how much (if at all) to slow down the layout at each iteration. With a value of 1, the layout never slows down, while a value of 0 forces all the nodes to immediately stop.

@sathomas
sathomas / README.md
Last active July 13, 2018 07:43
Understanding D3.js Force Layout - 5: charge

This is part of a series of examples that describe the basic operation of the D3.js force layout. Eventually they may end up in a blog post that wraps everything together. If you missed the beginning of the series, here's a link to first example.

The previous example shows how linkDistance tells the force layout the desired distance between connected nodes. It may seem strange that D3 doesn't simply compel all links to be that distance. The force layout, however, takes

@sathomas
sathomas / README.md
Last active August 20, 2018 21:16
GeoJSON with Voronoi

A visualization combining maps with a Voronoi diagram. Tornado sightings in 2013 from NOAA.

@sathomas
sathomas / README.md
Last active December 2, 2018 18:47
Understanding D3.js Force Layout - 8: gravity

This is part of a series of examples that describe the basic operation of the D3.js force layout. Eventually they may end up in a blog post that wraps everything together. If you missed the beginning of the series, here's a link to first example.

The code in the previous examples has mentioned a property that D3 calls gravity. The force layout uses this property to keep nodes from wandering off the edges of the visualization, something they might otherwise do to avoid overlap.

@sathomas
sathomas / README.md
Last active January 10, 2020 23:37
Visualizing Differential Equations, III

The experiment in visualizing differential equations graduates to second order systems with this example. The graph is based on a phase plane diagram for an autonomous system in x and y. Each line is a solution to the system, and the animation illustrates how each solution evolves in time.

Note: The speed of the animation does not represent the speed as which each solution evolves. Faithfully reproducing the solution velocities would require a more computationally intensive animation technique that would make the visualization impractical in typical web browsers.

The default system has a stable equilibrium point at (0,0), so points near the origin spiral in towards (0,0). All solutions except the one that starts at (0,0) take an infinite amount of time to get there, however. The system also has an equilibrium on the unit circle (a circle of radius 1). That equilibrium is unstable, though. Solutions that start outside the unit circle spiral off to infin