Scatter3d plot#

The scatter3d plot creates a three-dimensional scatter plot of the data.

[1]:
import plopp as pp
import scipp as sc
import numpy as np

Scatter plot using a positions vector#

The easiest way to generate a scatter plot is to use a coordinate of the data array that contains data of the vector3 dtype.

We first generate some fake data, meant to represent clusters of points in a three-dimensional space.

[2]:
nclusters = 100
npercluster = 1000

position = np.zeros((nclusters, npercluster, 3))
values = np.zeros((nclusters, npercluster))

for n in range(nclusters):
    center = 500.0 * (np.random.random(3) - 0.5)
    r = 20.0 * np.random.normal(size=[npercluster, 3])
    position[n, :] = r + center
    values[n, :] = np.linalg.norm(r, axis=1) + n

da = sc.DataArray(
    data=sc.array(dims=['row'], values=values.flatten(), unit='K'),
    coords={
        'position': sc.vectors(
            dims=['row'], unit='m', values=position.reshape(nclusters * npercluster, 3)
        )
    },
)
da
[2]:
Show/Hide data repr Show/Hide attributes
scipp.DataArray (3.05 MB)
    • row: 100000
    • position
      (row)
      vector3
      m
      [-195.53260452 81.42448025 80.45988017], [-195.75193837 80.78909357 66.4627026 ], ..., [-23.84722613 -93.54592814 55.04944849], [-17.6103564 -93.88898022 70.83922868]
      Values:
      array([[-195.53260452, 81.42448025, 80.45988017], [-195.75193837, 80.78909357, 66.4627026 ], [-222.35025835, 85.31834621, 83.37496238], ..., [ -6.79943487, -80.98157972, 38.15769451], [ -23.84722613, -93.54592814, 55.04944849], [ -17.6103564 , -93.88898022, 70.83922868]], shape=(100000, 3))
    • (row)
      float64
      K
      23.763, 17.789, ..., 123.933, 124.021
      Values:
      array([ 23.76314756, 17.78852974, 31.96209159, ..., 144.79012267, 123.93316052, 124.02149161], shape=(100000,))

We then simply specify the name of the coordinate that contains the vector positions using the pos argument:

[3]:
pp.scatter3d(da, pos='position', color='black', size=2)
[3]:

Scatter plot with colorbar#

To make a scatter plot with a colorbar mapping data values to colors, use cbar=True.

[4]:
pp.scatter3d(da, pos='position', cbar=True, size=2)
[4]:

Scatter plot using individual coordinates#

It is also possible to create scatter plots using three individual coordinate names for the x, y, z dimensions:

[5]:
time = np.linspace(0, 10, 50)
x = np.cos(time)
y = np.sin(time)

da = sc.DataArray(
    data=sc.array(dims=['row'], values=time),
    coords={
        'x': sc.array(dims=['row'], unit='m', values=x),
        'y': sc.array(dims=['row'], unit='m', values=y),
        'time': sc.array(dims=['row'], unit='s', values=time),
    },
)

pp.scatter3d(da, x='x', y='y', z='time', size=0.2, cbar=True)
[5]: