In the previous post, we explored how hvPlot and Datashader can help us to visualize large CSVs with point data in interactive map plots. Of course, the spatial distribution of points usually only shows us one part of the whole picture. Today, we’ll therefore look into how to explore other data attributes by linking other (non-spatial) plots to the map.
This functionality, referred to as “linked brushing” or “crossfiltering” is under active development and the following experiment was prompted by a recent thread on Twitter launched by @plotlygraphs announcement of HoloViews 1.14:
Turns out these features are not limited to plotly but can also be used with Bokeh and hvPlot:
Like in the previous post, this demo uses a Pandas DataFrame with 12 million rows (and HoloViews 1.13.4).
In addition to the map plot, we also create a histogram from the same DataFrame:
map_plot = df.hvplot.scatter(x='x', y='y', datashade=True, height=300, width=400) hist_plot = df.where((df.SOG>0) & (df.SOG<50)).hvplot.hist("SOG", bins=20, width=400, height=200)
To link the two plots, we use HoloViews’ link_selections function:
from holoviews.selection import link_selections linked_plots = link_selections(map_plot + hist_plot)
That’s all! We can now perform spatial filters in the map and attribute value filters in the histogram and the filters are automatically applied to the linked plots:
You’ve probably noticed that there is no background map in the above plot. I had to remove the background map tiles to get rid of an error in Holoviews 1.13.4. This error has been fixed in 1.14.0 but I ran into other issues with the datashaded Scatterplot.
It’s worth noting that not all plot types support linked brushing. For the complete list, please refer to http://holoviews.org/user_guide/Linked_Brushing.html