Tutorial 1. Overview

Welcome to HoloViz!

HoloViz is a set of compatible tools to make it easier to see and understand your data at every stage needed by users, research groups, and projects:

  • importing and cleaning
  • initial exploration
  • testing hypotheses
  • generating accurate and convincing figures
  • sharing and deploying live apps
  • improving and adapting each stage over time

Why "Holo"? "holo-", from the Greek root "hólos", means "whole, entire, complete".

Doesn't Python already cover all these stages?

Sure! That's how it ended up with:

Why so many tools?

Because each tool is typically limited to one or two of the stages in the data life cycle, supporting some well but not the others:

  • Simple, quick plots, but limited in capabilities, customization, and compositionality.
  • Deep capabilities for print-based plots, but weak or no support for custom interactivity in web apps.
  • Good interactivity in Jupyter, but weak or no support for batch processing or deployed servers.
  • Good support for deployed servers, but weak or no support for Jupyter or interactive exploration in general.
  • Good support for small datasets or heavily aggregated data, but not suitable for exploring the full raw data

How does HoloViz help?

To avoid having to abandon all your work on one stage to reach the next, HoloViz tools reduce friction and gaps between the stages:

  • All tools support web browsers, so you can always share results and use remote data or compute.
  • Even so, plots are built in Python, not web tech (JS/CSS), to support exploratory analysis.
  • You can use the same tools whether your data fits in a browser tab or requires server-side rendering.
  • All interactivity works the same in Jupyter and in a standalone deployment.
  • High-level (quick and convenient) interfaces are shortcuts, not dead ends, so you don't get stuck.
  • Where feasible, functionality is provided using the APIs you already know, so you don't have to learn new concepts unnecessarily

HoloViz libraries

With the above design goals in mind, we have developed a set of independent but complementary open-source Python packages to streamline the process of working with small and large datasets (from a few datapoints to billions or more) in a web browser, whether doing exploratory analysis, making simple widget-based tools, or building full-featured dashboards. The main libraries in this ecosystem include:

  • Panel: Assembling objects from many different libraries into a layout or app, whether in a Jupyter notebook or in a standalone servable dashboard
  • hvPlot: Quickly return Bokeh/Matplotlib/Plotly-based HoloViews plots from Pandas, Xarray, orother data structures
  • HoloViews: Declarative objects for instantly visualizable data, building Bokeh/Matplotlib/Plotly plots from convenient high-level specifications
  • GeoViews: Visualizable geographic data that that can be mixed and matched with HoloViews objects
  • Datashader: Rasterizing huge datasets quickly as fixed-size arrays or images
  • Lumen: Building Panel dashboards with HoloViews plots from a text file (low code) or GUI (no code)
  • Param: Declaring user-relevant parameters, making it simple to work with widgets inside and outside of a notebook context
  • Colorcet: Perceptually accurate continuous and categorical colormaps for any viz tool

These libraries work with and are built upon many other familiar open source libraries.

HoloViz currently covers this subset of viz tools

These tools are the most fully supported and are often entirely sufficient on their own.

The HoloViz tutorial

In this tutorial, we'll focus on an example set of data about earthquake events, using it to illustrate how to build a dashboard such as this one:

Each of the HoloViz tools provides its own API for accessing whatever functionality it implements (and sometimes more than one API, for different purposes!). For this tutorial, we will focus on the following APIs that we believe provide the most power to new users for the smallest investment of time and effort:

  • hvPlot .plot() API, which adds additional power to a well-known API supported by many different data libraries.
  • hvPlot .interactive() API, which brings live interactivity to the existing Pandas and Xarray APIs.
  • Panel, which lets you lay out your visual elements and build arbitrary interactivity linked by widgets.

This functionality builds on the native APIs for all the other libraries discussed above (plus many others in the SciPy/PyData ecosystem!), but in many cases hvPlot .plot(), hvPlot .interactive(), and a bit of Panel are all you need to learn to get your work done!