In [4]:
import math
import random
import nvd3
def bump(a, m):
x = 1 / (.1 + random.random())
y = 2 * random.random() - .5
z = 10 / (.1 + random.random())
for i in range(m):
w = (i / float(m) - y) * z
a[i] += x * math.exp(-w * w)
# Inspired by Lee Byron's test data generator.
def stream_layers(n, m, o=0):
def function(_):
a = [o + o * random.random() for i in xrange(m)]
for _ in range(5):
bump(a, m)
return map(lambda (i, d): {"x": i, "y": max(0, d)}, enumerate(a))
return map(function, xrange(n))
# Generate some nice data.
def example_data():
def entry((i, data)):
return {"key": "Stream #" + str(i), "values": data}
a = stream_layers(3, int(round(10 + random.random() * 100)), 0.1)
return map(entry, enumerate(a))
chart = nvd3.MultiBarChart()
chart.duration(350)
chart.reduceXTicks(True) # If 'false', every single x-axis tick label
# will be rendered.
chart.rotateLabels(0) # Angle to rotate x-axis labels.
chart.showControls(True) # Allow user to switch between 'Grouped' and
# 'Stacked' mode.
chart.multibar.groupSpacing(0.1) # Distance between each group of
# bars.
chart.xaxis.tickFormat("d3.format(',f')")
chart.yaxis.tickFormat("d3.format(',.1f')")
data_supplier = nvd3.StaticDataSupplier(example_data())
nvd3.IPythonContainer(chart, data_supplier, width=600, height=400)