I've been trying to determine the best way to visualize data that represents flows between entities. Examples of this type of data include trade, voters and immigration. I wanted to visualize the flows of migration between provinces in Canada and I wanted the plot to be interactive.

First I considered using chord diagrams in D3.js but D3 has a huge learning curve (due to the control it gives you in creating graphs). I also looked at the chord diagrams provided by Plotly. However, the chord diagram for Python is super ugly and I don't know enough about Plotly (yet) to customize it. I then stumbled upon the SANKEY PLOT, which Plotly can handle quite nicely.

The problem with the Plotly Sankey graph was that it was very hard to make it interactive. I wanted to have a dropdown menu where someone can select a province and see the immigration flows out of it into all other provinces. This led me to Dash, a Python framework for building web apps, specifically data visualization apps. I had heard about Dash from some random Twitter account but I didn't think I needed it until I talked to Sam. Sam is such a good resource. Thanks Sam. Check out his blog.

Anyways, enough chit chat. The chart is below.