Гистограмма с накоплением 100% боке

Как проще всего создать гистограмму с накоплением на 100% в Bokeh?, Например, предположим, что у меня есть следующие столбцы

S    P
34   65
23   44
12   81
 9   23

В excel я могу сделать этот тип сюжета очень простым, поэтому я получу что-то вроде этого:

введите здесь описание изображения

Однако я хочу иметь какое-то взаимодействие (например, показывать значения при наведении), поэтому я хочу создать такой график в Bokeh. Я новичок с Bokeh, и я не нашел ни одного подобного примера. Итак, какой подход был бы наилучшим?


person Xhoan    schedule 12.05.2017    source источник


Ответы (1)


Обработка данных

df_comb = df.join(df.divide(df.sum(axis=1), axis=0), rsuffix='_w').join(df.divide(df.sum(axis=1) * 2, axis=0), rsuffix='_w_labelheights')
df_comb['P_w_labelheights'] += df_comb['S_w']
df_comb

чтобы получить правильные пропорции и высоту этикеток

    S   P   S_w         P_w         S_w_labelheights    P_w_labelheights
0   34  65  0.343434    0.656566    0.171717    0.671717
1   23  44  0.343284    0.656716    0.171642    0.671642
2   12  81  0.129032    0.870968    0.064516    0.564516
3   9   23  0.281250    0.718750    0.140625    0.640625

Инициирование боке

для ноутбука

from bokeh.models import ColumnDataSource
from bokeh.plotting import show, output_notebook, figure as bf
output_notebook()

Создание сюжета

f = bf()
source = ColumnDataSource(df_comb)

s = f.vbar(x='index', bottom=0, top='S_w', width=0.5, source=source)
p = f.vbar(x='index', bottom='S_w', top=1, width=0.5, source=source, color='orange')

s_label = f.text(x='index', y='S_w_labelheights', source=source, text='S')
p_label = f.text(x='index', y='P_w_labelheights', source=source, text='P')

show(f)

введите описание изображения здесь

Впоследствии вы можете добавить HoverTool и исправить ticks и grid

person Maarten Fabré    schedule 12.05.2017
comment
добавление text_align='center' в f.text() колл-центров текст, если это то, что вы предпочитаете - person Maarten Fabré; 12.05.2017
comment
Справочную документацию можно найти здесь - person Maarten Fabré; 12.05.2017
comment
Большое спасибо, сэр, этот пример мне очень помог. - person Xhoan; 13.05.2017