# Image ¶

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


Like  Raster  , a HoloViews  Image  allows you to view 2D arrays using an arbitrary color map. Unlike  Raster  , an  Image  is associated with a 2D coordinate system in continuous space , which is appropriate for values sampled from some underlying continuous distribution (as in a photograph or other measurements from locations in real space).

In [2]:
ls = np.linspace(0, 10, 200)
xx, yy = np.meshgrid(ls, ls)

bounds=(-1,-1,1,1)   # Coordinate system: (left, bottom, top, right)
img = hv.Image(np.sin(xx)*np.cos(yy), bounds=bounds)
img

Out[2]:

Slicing, sampling, etc. on an  Image  all operate in this continuous space, whereas the corresponding operations on a  Raster  work on the raw array coordinates.

In [3]:
img + img[-0.5:0.5, -0.5:0.5]

Out[3]:

Notice how, because our declared coordinate system is continuous, we can slice with any floating-point value we choose. The appropriate range of the samples in the input numpy array will always be displayed, whether or not there are samples at those specific floating-point values. This also allows us to index by a floating value, since the  Image  is defined as a continuous space it will snap to the closest coordinate, to inspect the closest coordinate we can use the  closest  method:

In [4]:
%%opts Points (color='black' marker='x' size=20)
closest = img.closest((0.1,0.1))
print('The value at position %s is %s' % (closest, img[0.1, 0.1]))
img * hv.Points([img.closest((0.1,0.1))])

The value at position (0.105, 0.095000000000000001) is 0.129347201702

Out[4]:

We can also easily take cross-sections of the Image by using the sample method or collapse a dimension using the  reduce  method:

In [5]:
img.sample(x=0) + img.reduce(x=np.mean)

Out[5]:

The constructor of  Image  attempts to validate the input data by ensuring it is regularly sampled. In some cases, your data may be not be regularly sampled to a sufficiently high precision in which case you qill see an exception recommending the use of  QuadMesh  instead. If you see this message and are sure that the  Image  element is appropriate, you can set the  rtol  value in the constructor to allow a higher deviation in sample spacing than the default of  10e-6  . Alternatively, you can set this globally using  hv.config.image_rtol  as described in the Installing and Configuring user guide.

One additional way to create Image objects is via the separate ImaGen library, which creates parameterized streams of images for experiments, simulations, or machine-learning applications.

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