Introduction

The PyData ecosystem has a number of core Python data containers that allow users to work with a wide array of datatypes, including:

  • Pandas : DataFrame, Series (columnar/tabular data)
  • XArray : Dataset, DataArray (multidimensional arrays)
  • Dask : DataFrame, Series, Array (distributed/out of core arrays and columnar data)
  • Streamz : DataFrame(s), Series(s) (streaming columnar data)
  • Intake : DataSource (remote data)

Many of these libraries have the concept of a high-level plotting API that lets a user generate common plot types very easily. The native plotting APIs are generally built on Matplotlib , which provides a solid foundation, but means that users miss out the benefits of modern, interactive plotting libraries for the web like Bokeh and HoloViews .

hvPlot provides a high-level plotting API built on HoloViews and Bokeh that provides a general and consistent API for plotting data in all the abovementioned formats.

As a first simple illustration of using hvPlot, let's create a small set of random data in Pandas to explore:

In [1]:
import numpy as np
import pandas as pd

index = pd.date_range('1/1/2000', periods=1000)
df = pd.DataFrame(np.random.randn(1000, 4), index=index, columns=list('ABCD')).cumsum()

df.head()
Out[1]:
A B C D
2000-01-01 0.141868 1.015550 0.863731 0.089567
2000-01-02 -0.533398 1.162732 2.389310 -0.914433
2000-01-03 0.745970 1.564699 2.387371 -2.439423
2000-01-04 1.016624 4.000493 2.687663 -2.611465
2000-01-05 0.128884 3.631888 2.702234 -2.820871

Pandas default .plot()

Pandas provides Matplotlib-based plotting by default, using the .plot() method:

In [2]:
%matplotlib inline

df.plot();

The result is a PNG image that displays easily, but is otherwise static.

.hvplot()

If we instead change %matplotlib inline to import hvplot.pandas and use the df.hvplot method, it will now display an interactively explorable Bokeh plot with panning, zooming, hovering, and clickable/selectable legends:

In [3]:
import hvplot.pandas

df.hvplot()