In [ ]:
import numpy as np
from IPython.display import display
from bqplot import *

In [ ]:
size = 100
x_data = range(size)
np.random.seed(0)
y_data = np.cumsum(np.random.randn(size) * 100.0)
y_data_2 = np.cumsum(np.random.randn(size))
y_data_3 = np.cumsum(np.random.randn(size) * 100.)

Multiple marks in a single figure


In [ ]:
sc_ord = OrdinalScale()
sc_y = LinearScale()
sc_y_2 = LinearScale()

ord_ax = Axis(label='Test X', scale=sc_ord, tick_format='0.0f', grid_lines='none')
y_ax = Axis(label='Test Y', scale=sc_y, 
            orientation='vertical', tick_format='0.2f', 
            grid_lines='solid')
y_ax_2 = Axis(label='Test Y 2', scale=sc_y_2, 
              orientation='vertical', side='right', 
              tick_format='0.0f', grid_lines='solid')

In [ ]:
line_chart = Lines(x=x_data[:10], y = [y_data[:10], y_data_2[:10] * 100, y_data_3[:10]],
                   scales={'x': sc_ord, 'y': sc_y},
                   labels=['Line1', 'Line2', 'Line3'], 
                   display_legend=True)

bar_chart = Bars(x=x_data[:10], 
                 y=[y_data[:10], y_data_2[:10] * 100, y_data_3[:10]], 
                 scales={'x': sc_ord, 'y': sc_y_2},
                 labels=['Bar1', 'Bar2', 'Bar3'],
                 display_legend=True)

fig = Figure(axes=[ord_ax, y_ax],  marks=[bar_chart, line_chart], legend_location = 'bottom-left')

# the line does not have a Y value set. So only the bars will be displayed
display(fig)

Sample Histogram with mid-points set


In [ ]:
x_scale = LinearScale()
y_scale = LinearScale()

hist = Hist(sample=y_data, 
            colors=['orange'], 
            scales={'sample': x_scale, 'count': y_scale}, 
            labels=['Test Histogram'],
            display_legend=True)

x_ax = Axis(label='Test X', scale=x_scale, 
            tick_format='0.2f', grid_lines='none')

y_ax_2 = Axis(label='Test Y', scale=y_scale, orientation='vertical', tick_format='0.2f', grid_lines='none')

fig = Figure(axes=[x_ax, y_ax_2], marks=[hist])

In [ ]:
display(fig)

In [ ]:
# Setting the tick values to be the mid points of the bins
x_ax.tick_values = hist.midpoints

Line Chart Log Scale


In [ ]:
dates_all = np.arange('2005-02', '2005-03', dtype='datetime64[D]')
size = len(dates_all)
final_prices = 100 + 5 * np.cumsum(np.random.randn(size))

In [ ]:
## Log scale for the Y axis
dt_scale = DateScale()
lsc = LogScale()

ax_x = Axis(label='Date', scale=dt_scale, grid_lines='dashed')
lax_y = Axis(label='Log Price', scale=lsc, orientation='vertical', tick_format='0.1f', grid_lines='solid')

logline = Lines(x=dates_all, y=final_prices, scales={'x': dt_scale, 'y': lsc}, colors=['hotpink', 'orange'])
logfig = Figure(axes=[ax_x, lax_y], marks=[logline], fig_margin = dict(left=100, right=100, top=100, bottom=70))
display(logfig)

Multiple Marks with Ordinal Scale


In [ ]:
# Plotting a bar and line chart on the same figure with x axis being an oridnal scale.
ord_scale = OrdinalScale()
lin_scale = LinearScale()

bar_chart = Bars(x=x_data[:10],
                 y=np.abs(y_data_3[:10]),
                 scales={'x': ord_scale, 'y': lin_scale}, 
                 colors=['hotpink', 'orange', 'limegreen'],
                 padding=0.5)

line_chart = Lines(x=x_data[:10], 
                   y=np.abs(y_data[:10]), 
                   scales={'x': ord_scale, 'y': lin_scale}, 
                   colors=['hotpink', 'orange', 'limegreen'])
bar_x = Axis(scale=ord_scale, orientation='horizontal', grid_lines='none', 
             set_ticks=True)
bar_y = Axis(scale=lin_scale, orientation='vertical', grid_lines='none')
fig_2 = Figure(axes=[bar_x, bar_y], marks=[bar_chart, line_chart])
display(fig_2)

Setting min and max along an axis for plots


In [ ]:
sc_x = LinearScale(min=10, max=50)
sc_y = LinearScale()

x_data = np.arange(100)
line_1 = Lines(x=x_data, y=y_data_2, scales={'x': sc_x, 'y': sc_y}, colors=['orange'])

ax_x = Axis(scale=sc_x)
ax_y = Axis(scale=sc_y, orientation='vertical', tick_format='.2f')
fig = Figure(marks=[line_1], axes=[ax_x, ax_y])
display(fig)

In [ ]:
## changing the min/max
sc_x.min = -10
sc_x.max = 110

Marks which do not affect the domain along an axis


In [ ]:
sc_x = LinearScale()
sc_y = LinearScale()

x_data = np.arange(50)

line_1 = Lines(x=x_data, y=y_data, scales={'x': sc_x, 'y': sc_y}, colors=['blue'])
line_2 = Lines(x=x_data, y=y_data * 2, scales={'x': sc_x, 'y': sc_y}, colors=['orangered'], preserve_domain={'y': True})

ax_x = Axis(scale=sc_x)
ax_y = Axis(scale=sc_y, orientation='vertical')
fig = Figure(marks=[line_1, line_2], axes=[ax_x, ax_y])
display(fig)

In [ ]:
with line_2.hold_sync():
    line_2.preserve_domain={}

Preserve domain for color scale


In [ ]:
sc_x = LinearScale()
sc_y = LinearScale()
sc_col = ColorScale(colors=['red', 'white', 'green'], mid=0.0)

x_data = np.arange(50)

scatt_1 = Scatter(x=x_data, y=y_data[:50], color=y_data[:50], scales={'x': sc_x, 'y': sc_y, 'color': sc_col},marker='circle')
scatt_2 = Scatter(x=x_data, y=y_data[:50] * 2, color=y_data[:50] * 2, scales={'x': sc_x, 'y': sc_y, 'color': sc_col}, 
               preserve_domain={'color': True}, marker='cross')

ax_x = Axis(scale=sc_x)
ax_y = Axis(scale=sc_y, orientation='vertical')
fig = Figure(marks=[scatt_1, scatt_2], axes=[ax_x, ax_y])
display(fig)

Reversing a scale


In [ ]:
sc_x = LinearScale(reverse=True)
sc_y = LinearScale()

x_data = np.arange(50)

line_1 = Lines(x=x_data, y=y_data, scales={'x': sc_x, 'y': sc_y}, colors=['orange'])

ax_x = Axis(scale=sc_x)
ax_y = Axis(scale=sc_y, orientation='vertical')
fig = Figure(marks=[line_1], axes=[ax_x, ax_y])
display(fig)

Fixing the domain of an ordinal scale


In [ ]:
ord_scale = OrdinalScale(domain=list(range(20)))
y_scale = LinearScale()

bar_chart = Bars(x=x_data[:10], 
                 y=[(y_data[:10]), y_data_2[:10] * 100, y_data_3[:10]], 
                 scales={'x': ord_scale, 'y': y_scale},
                 colors=['hotpink', 'orange', 'limegreen'],
                 labels=['Component 1', 'Component 2', 'Component 3'],
                 display_legend=True)

bar_x = Axis(scale=ord_scale, orientation='horizontal', set_ticks=True, grid_lines='none')
bar_y = Axis(scale=y_scale, orientation='vertical', grid_lines='none')

fig_2 = Figure(axes=[bar_x, bar_y], marks=[bar_chart])
display(fig_2)

Applying clip to marks


In [ ]:
sc_x = LinearScale(min=10, max=90)
sc_y = LinearScale()

x_data = np.arange(100)
line_1 = Lines(x=x_data, y=y_data_3, scales={'x': sc_x, 'y': sc_y}, colors=['orange'], labels=['Clipped Line'],
               display_legend=True)
line_2 = Lines(x=x_data, y=y_data, scales={'x': sc_x, 'y': sc_y}, apply_clip=False, colors=['orangered'], 
               labels=['Non clipped line'], display_legend=True)

ax_x = Axis(scale=sc_x)
ax_y = Axis(scale=sc_y, orientation='vertical')
fig = Figure(marks=[line_1, line_2], axes=[ax_x, ax_y])
display(fig)