# Ndoverlay ¶

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


An  NdOverlay  is a multi-dimensional dictionary of HoloViews elements presented overlayed in the same space. An  NdOverlay  can be considered as a special-case of  HoloMap  that can only hold a single type of element at a time. Unlike a regular  Overlay  that can be built with the  *  operator, the items in an  NdOverlay  container have corresponding keys and must all have the same type. See the Building Composite Objects user guide for details on how to compose containers.

###  NdOverlay  holds dictionaries ¶

Using the  sine_curve  function below, we can declare a dictionary of  Curve  elements, where the keys correspond to the frequency values:

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 an  NdOverlay  by declaring the keys as corresponding to the frequency key dimension:

In [3]:
ndoverlay = hv.NdOverlay(curve_dict, kdims='frequency')
ndoverlay

Out[3]:

Note that the  NdOverlay  is displayed with a legend using colors defined by the  Curve  color cycle. For more information on using  Cycle  to define color cycling, see the [User Guide].

###  NdOverlay  is multi-dimensional ¶

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

In [4]:
curve_dict_2D = {(p,f):sine_curve(p,f) for p in [0, np.pi/2] for f in [0.5, 0.75]}
ndoverlay = hv.NdOverlay(curve_dict_2D, kdims=['phase', 'frequency'])
ndoverlay

Out[4]:

###  NdOverlay  is similar to  HoloMap  ¶

Other than the difference in the visual semantics, whereby  NdOverlay  displays its contents overlaid,  NdOverlay  are very similar to  HoloMap  (see the  HoloMap  notebook for more information).

One way to demonstrate the similarity of these two containers is to cast our  ndoverlay  object to  HoloMap  and back to an  NdOverlay  :

In [5]:
hmap = hv.HoloMap(ndoverlay)
hmap + hv.NdOverlay(hmap)

Out[5]: