Holomap

Download this notebook from GitHub (right-click to download).


Title
HoloMap Container
Dependencies
Plotly
Backends
Matplotlib
Bokeh
Plotly
In [1]:
import numpy as np
import holoviews as hv
hv.extension('matplotlib')

A HoloMap is an explorable multi-dimensional dictionary of HoloViews objects. A HoloMap cannot contain Layouts, NdLayouts, GridSpaces or other HoloMaps or DyamicMap but can contain any other HoloViews object. See the Building Composite Objects user guide for details on how to compose containers.

HoloMap holds dictionaries

As a HoloMap is a dictionary of elements, let us now create a dictionary of sine curves:

In [2]:
frequencies = [0.5, 0.75, 1.0, 1.25]

def sine_curve(phase, freq):
    xvals = [0.1* i for i in range(100)]
    return hv.Curve((xvals, [np.sin(phase+freq*x) for x in xvals]))

curve_dict = {f:sine_curve(0,f) for f in frequencies}

We now have a dictionary where the frequency is the key and the corresponding curve element is the value. We can now turn this dictionary into a HoloMap by declaring the keys as corresponding to the frequency key dimension:

In [3]:
hmap = hv.HoloMap(curve_dict, kdims='frequency')
hmap
Out[3]:

HoloMap is multi-dimensional

By using tuple keys and making sure each position in the tuple is assigned a corresponding kdim, HoloMaps allow exploration of a multi-dimensional space:

In [4]:
phases      = [0, np.pi/2, np.pi, 3*np.pi/2]
curve_dict_2D = {(p,f):sine_curve(p,f) for p in phases for f in frequencies}
hmap = hv.HoloMap(curve_dict_2D, kdims=['phase', 'frequency'])
hmap
Out[4]:

HoloMap supports dictionary-like behavior

HoloMaps support a number of features similar to regular dictionaries, including assignment:

In [5]:
hmap = hv.HoloMap(kdims=['phase', 'frequency'])
for (phase, freq) in [(0,0.5), (0.5,0.5), (0.5,1), (0,1)]:
    hmap[(phase, freq)] = sine_curve(phase,freq)

Key membership predicate:

In [6]:
(0, 0.5) in hmap
Out[6]:
True

The get method::

In [7]:
hmap.get((0,0.5))
Out[7]:

HoloMap supports multi-dimensional indexing and slicing

One difference with regular dictionaries, is that HoloMaps support multi-dimensional indexing:

In [8]:
hmap[0,1] + hmap[0,:]
Out[8]:

See the [User Guide] for more information on selecting, slicing and indexing.

HoloMap is ordered

One difference with regular Python dictionaries is that they are ordered, which can be observed by inspecting the .data attribute:

In [9]:
hmap.data
Out[9]:
OrderedDict([((0, 0.5), :Curve   [x]   (y)),
             ((0, 1), :Curve   [x]   (y)),
             ((0.5, 0.5), :Curve   [x]   (y)),
             ((0.5, 1), :Curve   [x]   (y))])

We see that internally, HoloMaps uses OrderedDict where the keys are sorted by default. You can set sort=False and then either supply an ordered list of (key, value) tuples, an OrderedDict or insert items in a chosen order.

That said, there is generally very-little reason to ever use sort=False as regular Python dictionaries do not have a well-defined key ordering and HoloViews sliders work regardless of the ordering used. The only reason to set the ordering is if you wish to iterate over a HoloMap using the items, keys, values methods or use the iterator interface.


Download this notebook from GitHub (right-click to download).