如何使用散景绘制堆叠的条形图?

时间:2020-10-19 23:15:59

标签: pandas dataframe bar-chart bokeh

我正试图从此数据绘制堆积的条形图:

SYMBOL  COUNT    IMPACT
A  1       LOW
B  1       LOW
C  1       LOW
D  1       LOW
E  2       LOW
F  3       LOW
G  3       LOW
I  1       LOW
J  1  MODERATE
A  1  MODERATE
B  2  MODERATE
K  1  MODERATE
L  5  MODERATE
D  1  MODERATE
F  1  MODERATE
H  4  MODERATE
I  1  MODERATE
L  3      HIGH
E  1      HIGH
F  1      HIGH
G  1      HIGH

该想法是制作3个小节(每个可能的影响之一)并将该小节划分为“ SYMBOL”。但是我没有找到无需手动创建字典的方法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要旋转数据,但是您可以像这样获得堆积的条形图:

数据操作:

plot_df = (df.pivot(index="SYMBOL", columns="IMPACT", values="COUNT")
           .fillna(0)
           .rename_axis(columns=None))

print(plot_df)

        HIGH  LOW  MODERATE
SYMBOL                     
A        0.0  1.0       1.0
B        0.0  1.0       2.0
C        0.0  1.0       0.0
D        0.0  1.0       1.0
E        1.0  2.0       0.0
F        1.0  3.0       1.0
G        1.0  3.0       0.0
H        0.0  0.0       4.0
I        0.0  1.0       1.0
J        0.0  0.0       1.0
K        0.0  0.0       1.0
L        3.0  0.0       5.0

绘图:

from bokeh.plotting import figure
from bokeh.palettes import Category10_3
from bokeh.io import show

symbols = list(plot_df.index)
impacts = list(plot_df.columns)

source = ColumnDataSource(plot_df)

p = figure(width=500, height=250, x_range=symbols)
p.vbar_stack(impacts, width=0.7, x="SYMBOL", source=source, color=Category10_3, legend_label=impacts)

p.y_range.start = 0
p.xgrid.grid_line_color = None
p.legend.location = "top_left"

show(p)

enter image description here