# Points#

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

Title
Points Element
Dependencies
Bokeh
Backends
Bokeh
Matplotlib
Plotly
```import numpy as np
import holoviews as hv
import pandas as pd
from holoviews import opts, dim
hv.extension('bokeh')
```

The `Points` element visualizes as markers placed in a space of two independent variables, traditionally denoted x and y. In HoloViews, the names `'x'` and `'y'` are used as the default key dimensions (`kdims`) of the element. We can see this from the default axis labels when visualizing a simple `Points` element:

```np.random.seed(12)
coords = np.random.rand(50,2)
points = hv.Points(coords)

points.opts(color='k', marker='+', size=10)
```

Here the random `x` values and random `y` values are both considered to be the coordinates, with no dependency between them (compare this to the different way that `Scatter` elements are defined). You can think of `Points` as simply marking positions in some two-dimensional space. Such positions can be sliced by specifying a 2D region of interest:

```(points + points[0.6:0.8,0.2:0.5]).opts(
opts.Points(color='k', marker='+', size=10))
```

Although the simplest `Points` element simply marks positions in a two-dimensional space without any associated value, value dimensions (`vdims`) are also supported. Here is an example with two additional quantities for each point, declared as the `vdims`s `z` and `size` (visualized as the color and size of the dots, respectively):

```np.random.seed(10)
data = np.random.rand(100,4)
popts = opts.Points(color='z', size=dim('size')*20)

points = hv.Points(data, vdims=['z', 'size'])
(points + points[0.3:0.7, 0.3:0.7].hist()).opts(popts)
```

In the right subplot, the `hist` method is used to show the distribution of samples along the first value dimension we added (z).

The marker shape specified above can be any supported by matplotlib, e.g. `s`, `d`, or `o`; the other options select the color and size of the marker. For convenience with the bokeh backend, the matplotlib marker options are supported using a compatibility function in HoloViews.

Note that the data accepted by Points is specified as a sequence of points, where each point is a set of coordinates. For instance, the five points selected above (one of which is tiny and may be hard to spot!) are a sequence of five (x,y,color,size) coordinates:

```pts = points[0.3:0.7, 0.3:0.5].data
pts
```
```array([[0.44183317, 0.43401399, 0.61776698, 0.51313824],
[0.37764192, 0.42874733, 0.51120865, 0.89176257],
[0.30021061, 0.39644188, 0.79327323, 0.41227608],
[0.54346504, 0.33775465, 0.89802431, 0.94070704],
[0.38412185, 0.39611779, 0.89727994, 0.05882237]])
```

If your data stores each coordinate axis separately you can either use a Pandas DataFrame, a Python dictionary, or transpose the data before passing it into Points:

```copts = opts.Points(color='z', size=dim('size')*20, width=250, height=250)

xs     = [0.44183317, 0.37764192, 0.30021061, 0.54346504, 0.38412185]
ys     = [0.43401399, 0.42874733, 0.39644188, 0.33775465, 0.39611779]
colors = [0.61776698, 0.51120865, 0.79327323, 0.89802431, 0.89727994]
sizes  = [0.51313824, 0.89176257, 0.41227608, 0.94070704, 0.05882237]

dictionary = dict(x=xs, y=ys, z=colors, size=sizes)
df = pd.DataFrame(dictionary)
array = np.stack([xs,ys,colors,sizes]).T

(hv.Points(df) +
hv.Points(dictionary, vdims=['z', 'size']) +
hv.Points(array, vdims=['z', 'size'])).opts(copts)
```

Note: Although the `Scatter` element is superficially similar to the `Points` element (they can generate plots that look identical), the two element types are semantically quite different. The fundamental difference is that Scatter is used to visualize data where the y variable is dependent, unlike `Points`. This semantic difference also explains why the histogram generated by the `hist` call above visualizes the distribution of a different dimension than it does for `Scatter` (because here z, not y, is the first `vdim`).

This difference means that `Points` elements can most naturally overlay with other elements that express independent variables in two-dimensional space, such as `Raster` types like `Image`. Conversely, `Scatter` expresses a dependent relationship between x and y and thus most naturally overlay with `Chart` types such as `Curve`.

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

This web page was generated from a Jupyter notebook and not all interactivity will work on this website. Right click to download and run locally for full Python-backed interactivity.

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