Labels

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


Title
Labels Element
Dependencies
Bokeh
Backends
Bokeh
Matplotlib
In [1]:
import numpy as np
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')

The Labels element may be used to annotate a plot with a number of labels. Unlike the Text element, Labels is vectorized and allows plotting many labels at once. It also supports any tabular or gridded data format. This also means that most other elements may be cast to a Labels element to annotate or label the values.

Labels also support various other options that make it convenient to use as an annotation, e.g. xoffset and yoffset options allow adjusting the position of the labels relative to an existing data point:

In [2]:
np.random.seed(9)
data = np.random.rand(10, 2)
points = hv.Points(data)
labels = hv.Labels({('x', 'y'): data, 'text': [chr(65+i) for i in range(10)]}, ['x', 'y'], 'text')
overlay = (points * labels).redim.range(x=(-0.2, 1.2), y=(-.2, 1.2))

overlay.opts(
    opts.Labels(text_font_size='10pt', xoffset=0.08),
    opts.Points(color='black', size=5))
Out[2]:

The same concept also works for other types, e.g. here we will overlay Labels for every second value on top of a HeatMapby casting it to a Labels type:

In [3]:
data = [(chr(65+i), chr(97+j),  i*j) for i in range(8) for j in range(8) if i!=j]
heatmap = hv.HeatMap(data) 

heatmap * hv.Labels(heatmap)
Out[3]:

If the value dimension of the data is not already of string type it will be formatted using the applicable entry in Dimension.type_formatters or an explicit value_format defined on the Dimension. Additionally the text_color option allows us to colormap the text by a dimension.

Here we will create a 2D array of values, define a Dimension with a formatter and then colormap the text:

In [4]:
value_dimension = hv.Dimension('Values', value_format=lambda x: '%.1f' % x)
xs = ys = np.linspace(-2.5, 2.5, 25)
zs = np.sin(xs**2)*np.sin(ys**2)[:, np.newaxis]

labels = hv.Labels((xs, ys, zs), vdims=value_dimension)
labels.opts(
    opts.Labels(bgcolor='black', cmap='magma', text_color='Values', height=400, text_font_size='6pt', width=400))
Out[4]:

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