Scatter plots in Lightning


Setup

In [1]:
from lightning import Lightning

from numpy import random, asarray, sqrt, arctan2, pi, clip
from seaborn import color_palette
from sklearn import datasets
from colorsys import hsv_to_rgb

Connect to server

In [2]:
lgn = Lightning(ipython=True, host='http://public.lightning-viz.org')
Lightning initialized
Connected to server at http://public.lightning-viz.org


Random points with default styling

In [3]:
n = 100
x = random.randn(n)
y = random.randn(n)
lgn.scatter(x, y)
Out[3]:


Random big purple points

Style options like color and size can be passed a single value, which affects all points

In [4]:
n = 100
x = random.randn(n)
y = random.randn(n)
c = [145,117,240]
s = 18
lgn.scatter(x, y, color=c, size=s)
Out[4]:


Random points with all styling options

Style options can also be passed as lists with one value per point, either scalars (for alpha and size) or arrays (for color).
In this example we also use seaborn's excellent color_palette tool to select our colors.

In [5]:
n = 100
x = random.randn(n)
y = random.randn(n)
c = [asarray(color_palette('Blues', 100)[random.choice(range(100))])*255 for i in range(n)]
a = random.rand(n)
s = random.rand(n)*15+8
lgn.scatter(x, y, color=c, alpha=a, size=s)
Out[5]:


Clustered points with group labels

Instead of specifying colors directly as rgb, you can specify labels (or group assignments).
Here we use scikitlearn to generate clusters and then color according to cluster label.

In [6]:
d, g = datasets.make_blobs(n_features=2, n_samples=200, centers=5, cluster_std=2.0, random_state=100)
x = d[:, 0]
y = d[:, 1]
lgn.scatter(x, y, group=g, alpha=0.8, size=12)
Out[6]:


Color by value

We can color points by a numerical value by passing that value, and a Colorbrewer colormap.

In [7]:
n = 200
x = random.randn(n)
y = random.randn(n)
v = random.rand(n)
lgn.scatter(x, y, values=v, alpha=0.6, colormap='YlOrRd')
Out[7]:


Fun with colors

We can use geometry to set colors based on point position and get a pretty result.

In [8]:
n = 200
x = random.randn(n)
y = random.randn(n)
r = map(lambda (x, y): sqrt(x ** 2 + y ** 2), zip(x,y))
t = map(lambda (x, y): arctan2(x, y), zip(x,y))
c = map(lambda (r, t): asarray(hsv_to_rgb(t / (2 * pi), r, 0.9))*255, zip(r, t))
s = asarray(r) * 10 + 2
lgn.scatter(x, y, color=c, size=s, alpha=0.6)
Out[8]:

Axis labels

We can add axis labels by providing extra arguments

In [9]:
x = random.randn(100)
y = random.randn(100)

lgn.scatter(x, y, xaxis='my axis label 1', yaxis='my axis label 2')
Out[9]: