In [1]:
from bokeh.io import output_notebook, show
output_notebook()
In [2]:
from bokeh.charts import Donut
def pie_chart(values, labels, title):
data = {'values': values}
# Calculate percents for each value, used as wedge labels.
data['percents'] = ['{:0.2f}'.format(100 * amount / sum(data['values']))
for amount in data['values']]
donut = Donut(data, values='values', legend='top_left',
labels=labels, label='percents', title=title)
return donut
In [3]:
show(pie_chart([2, 3], ['a', 'b'], 'test chart'))
Out[3]:
In [4]:
import pandas as pd
from bokeh.charts.utils import df_from_json
from bokeh.sampledata.olympics2014 import data
# utilize utility to make it easy to get json/dict data converted to a dataframe
df = df_from_json(data)
# filter by countries with at least one medal and sort by total medals
df = df[df['total'] > 8]
df = df.sort("total", ascending=False)
df = pd.melt(df, id_vars=['abbr'],
value_vars=['bronze', 'silver', 'gold'],
value_name='medal_count', var_name='medal')
# original example
d = Donut(df, label=['abbr', 'medal'], values='medal_count', legend='top_left',
text_font_size='8pt', hover_text='medal_count')
show(d)
Out[4]:
In [10]:
pie = pie_chart([2, 3], ['a', 'b'], 'test chart')
In [13]:
from bokeh.models import Legend
legend = pie.select_one(Legend)
In [20]:
legend.legends = [
('a', [pie.renderers[1]]),
('b', [pie.renderers[2]])
]
In [21]:
show(pie)
Out[21]:
In [22]:
pie.renderers
Out[22]:
In [26]:
wedge = pie.renderers[1].glyph
In [27]:
wedge.fill_color
Out[27]:
In [ ]: