# Spikes ¶

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


Spikes represent any number of horizontal or vertical line segments with fixed or variable heights. There are a number of different uses for this type. First of all, they may be used as a rugplot to give an overview of a one-dimensional distribution. They may also be useful in more domain-specific cases, such as visualizing spike trains for neurophysiology or spectrograms in physics and chemistry applications.

In the simplest case, a Spikes object represents coordinates in a 1D distribution:

In [2]:
%%opts Spikes (alpha=0.4) [spike_length=0.1]
xs = np.random.rand(50)
hv.Spikes(xs)

Out[2]:

We can overlay  Spikes  on top of other  Chart  elements (such as  Points  or  Curve  ) if we want to draw attention to where samples are along the x-axis:

In [3]:
%%opts Points (color='red')
ys = np.random.rand(50)
hv.Points((xs, ys)) * hv.Spikes(xs)

Out[3]:

When supplying a second dimension to the  Spikes  element as a value dimensions, these additional values will be mapped onto the line height. Optionally, you may also supply a colormap  cmap  and  color_index  to map the value dimensions to a suitable set of colors. This way we can, for example, plot a mass spectrogram :

In [4]:
%%opts Spikes [color_index='Intensity'] (cmap='Reds')
hv.Spikes(np.random.rand(20, 2), 'Mass', 'Intensity')

Out[4]:

Another possibility is to draw a number of spike trains representing the firing of neurons, of the sort that are commonly encountered in neuroscience. Here we generate 10 separate random spike trains and distribute them evenly across the space by setting their  position  . By declaring some  yticks  , each spike train can be labeled individually:

In [5]:
%%opts Spikes [spike_length=0.1] NdOverlay [show_legend=False]
hv.NdOverlay({i: hv.Spikes(np.random.randint(0, 100, 10), 'Time').options(position=0.1*i)
for i in range(10)}).options(yticks=[((i+1)*0.1-0.05, i) for i in range(10)])

Out[5]:

Finally, we may use  Spikes  to visualize marginal distributions as adjoined plots using the  <<  adjoin operator:

In [6]:
%%opts Spikes (alpha=0.2)
points = hv.Points(np.random.randn(500, 2))
points << hv.Spikes(points['y']) << hv.Spikes(points['x'])

Out[6]:

For full documentation and the available style and plot options, use  hv.help(hv.Spikes).