散景 100% 堆叠条形图
Bokeh 100% Stacked Bar Chart
在 Bokeh
中制作 100% 堆叠条形图的最简单方法是什么?例如,假设我有以下列
S P
34 65
23 44
12 81
9 23
在excel
中我可以很容易地制作这种类型的情节,所以我会得到这样的东西:
但是我想进行一些交互(比如在悬停时显示值)因此我想在 Bokeh
中制作这种情节。我是 Bokeh
的初学者,我还没有找到任何与此类似的例子。那么,最好的方法是什么?
数据整理
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
在 Bokeh
中制作 100% 堆叠条形图的最简单方法是什么?例如,假设我有以下列
S P
34 65
23 44
12 81
9 23
在excel
中我可以很容易地制作这种类型的情节,所以我会得到这样的东西:
但是我想进行一些交互(比如在悬停时显示值)因此我想在 Bokeh
中制作这种情节。我是 Bokeh
的初学者,我还没有找到任何与此类似的例子。那么,最好的方法是什么?
数据整理
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