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
In [2]:
lgn = Lightning(ipython=True, host='http://public.lightning-viz.org')
In [3]:
n = 100
x = random.randn(n)
y = random.randn(n)
lgn.scatter(x, y)
Out[3]:
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]:
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]:
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]:
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]:
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]:
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]: