Python 在条形堆栈图中标记和操作每个堆栈

Python 在条形堆栈图中标记和操作每个堆栈,python,plotly,bokeh,Python,Plotly,Bokeh,我正在尝试使用不同于plotly瀑布函数的方法创建瀑布图,因为它无法处理堆叠的图表。所以我决定创建条形图并隐藏基本层以获得我想要的。下面的代码从视觉上获得了我想要的东西,但我需要能够引用每个堆栈,以便我可以更改其颜色,并将标签添加到每个堆栈以及顶部的总数。(底座上当然没有标签) %matplotlib内联 作为pd进口熊猫 将numpy作为np导入 从matplotlib.pyplot导入* 导入matplotlib matplotlib.style.use('ggplot') 数据={'Lab

我正在尝试使用不同于
plotly
瀑布函数的方法创建瀑布图,因为它无法处理堆叠的图表。所以我决定创建条形图并隐藏基本层以获得我想要的。下面的代码从视觉上获得了我想要的东西,但我需要能够引用每个堆栈,以便我可以更改其颜色,并将标签添加到每个堆栈以及顶部的总数。(底座上当然没有标签)

%matplotlib内联
作为pd进口熊猫
将numpy作为np导入
从matplotlib.pyplot导入*
导入matplotlib
matplotlib.style.use('ggplot')
数据={'Labels':['A','B','C','D','E','F','F','G','H'],
'Base':['0'、'1092'、'975'、'0'、'630'、'523'、'0'、'319'、'0'],
‘A’:[‘546’、‘208’、‘266’、‘487’、‘172’、‘53’、‘261’、‘102’、‘159’],
‘B’:[546’、‘208’、‘266’、‘487’、‘172’、‘53’、‘261’、‘102’、‘159’]
WF=pd.DataFrame(数据)
a=WF.columns.drop('Labels')
WF[a]=WF[a]。应用(pd.to_numeric,errors='concurve')
颜色=[“#FFFFFF”、“#0076B6”、“#4099C9”]
a=WF.loc[:,['Base','a','B']].plot.bar(叠加=真,颜色=颜色,
宽度=0.8,figsize=(20,10))
a、 设置面颜色(“w”)
a、 将\u xticklabels(WF['Labels']设置为\u list())
对于a.patches[9:]中的p:
宽度,高度=p.获取宽度(),p.获取高度()
x、 y=p.获得_xy()
a、 文本(x+宽度/2,
y+高度/2,
“{.0f}”。格式(高度),
水平对齐='中心',
垂直对齐(中心)
这给了我想要的,但我不能给单个的x条上色,也就是说,我需要C、e和F列为红色。

但是这个用Bokeh编写的代码实现了我所需要的

from bokeh.plotting import figure
from bokeh.core.properties import value
from bokeh.io import show
from bokeh.transform import stack, factor_cmap
import pandas as pd
#output_notebook()
df = pd.DataFrame({
    "Category": ['Item1','Item2','Item3','Item4','Item5','Item6','Item7','Item8','Item9'],
    "Regime1_Value": [0, 841.77, 1140.52, 0, 674.25, 620.85, 0, 378.72, 0],
    "Regime1_State": ["D", "D", "D", "D", "D", "D", "D", "D", "D"],
    "Regime2_Value": [546.12, 208.61, 93.11, 661.63, 172.70, 53.40, 453.53, 169.86, 265.67],
    "Regime2_State": ["C", "C", "A", "C", "A", "A", "C", "A", "C"],
    "Regime3_Value": [295.65,183.24,0.00,478.89,293.57,0.00,185.32,72.27,113.04],
    "Regime3_State": ["B", "B", "E", "B", "E", "E", "B", "E", "B"]})

p = figure(x_range=['Item1','Item2','Item3','Item4','Item5','Item6','Item7','Item8','Item9'],
          height=800, width=1200)
p.vbar_stack(["Regime1_Value", "Regime2_Value", "Regime3_Value"],
        x="Category",
        fill_color=[
            factor_cmap(state, palette=["#CC3333", "#4099C9", "#0076B6", 
"white", "#D65C5C"], factors=["A", "B", "C", "D","E"])
            for state in ["Regime1_State","Regime2_State", "Regime3_State"]],
        line_color="white",
        width=0.9,
        source=df,
            legend=[value(x) for x in ['','Tomato','Banana']])
p.background_fill_color = "white"
p.xgrid.visible = False
p.ygrid.visible = False

show(p)
因此,这里的颜色是完美的,但我不知道如何添加标签到每个堆栈和顶部的总标签。此外,还需要隐藏作为Regime1_值的基值。

非常感谢您的帮助