In [2]:
import pandas as pd
from datetime import datetime
from bokeh.models import (
Plot, Line, LinearAxis, DatetimeAxis,
SingleIntervalTicker, DatetimeTickFormatter,
ColumnDataSource, Range1d,
Text, Circle, Legend, Callback
)
from bokeh.models.widgets import TextInput, Button, DatePicker
from bokeh.palettes import Spectral6
from bokeh.plotting import show, output_notebook, vplot, hplot
output_notebook()
In [3]:
followers = pd.read_csv('followers-fake.csv', index_col='date', parse_dates=True)
party_list = list(followers.columns)
party_list
Out[3]:
In [8]:
source = ColumnDataSource(followers)
xdr = Range1d(datetime(2015,1,1), datetime(2015,7,1))
ydr = Range1d(0, 1000)
PLOT_FORMATS = dict(
x_range=xdr,
y_range=ydr,
title="",
plot_width=800,
plot_height=400,
outline_line_color=None,
toolbar_location=None,
)
AXIS_FORMATS = dict(
minor_tick_in=None,
minor_tick_out=None,
major_tick_in=None,
major_label_text_font_size="10pt",
major_label_text_font_style="normal",
axis_label_text_font_size="10pt",
axis_line_color='#AAAAAA',
major_tick_line_color='#AAAAAA',
major_label_text_color='#666666',
major_tick_line_cap="round",
axis_line_cap="round",
axis_line_width=1,
major_tick_line_width=1,
)
xaxis = DatetimeAxis(formatter=DatetimeTickFormatter(formats=dict(months=["%b %Y"])), **AXIS_FORMATS)
yaxis = LinearAxis(SingleIntervalTicker(interval=200), axis_label="# of followers", **AXIS_FORMATS)
code="dateRange.set('%s', new Date(%s.get('value')).valueOf());"
start_callback = Callback(args={}, code=code % ('start', 'start'))
end_callback = Callback(args={}, code=code % ('end', 'end'))
start = DatePicker(callback=start_callback)
end = DatePicker(callback=end_callback)
start_callback.args['start'] = start
end_callback.args['end'] = end
start_callback.args['dateRange'] = xdr
end_callback.args['dateRange'] = xdr
In [9]:
plot = Plot(**PLOT_FORMATS)
legends = []
for i, party in enumerate(party_list):
line = Line(x='date', y=party, line_color=Spectral6[i])
lg = plot.add_glyph(source, line)
legends.append((party, [lg]))
legend = Legend(legends=legends, orientation='top_left', border_line_color='white')
plot.add_layout(xaxis, 'below')
plot.add_layout(yaxis, 'left')
plot.add_layout(legend)
show(vplot(hplot(start, end), plot))
In [ ]: