Python绘图如何将自定义悬停标签应用于堆叠比例条形图

Python绘图如何将自定义悬停标签应用于堆叠比例条形图,python,plotly,Python,Plotly,我已在Plotly中创建了比例堆叠条形图,但无法使用自定义数据正确更新悬停标签 我的整个剧本是: import pandas as pd import numpy as np import random import plotly.graph_objects as go # create the data frame df = pd.DataFrame({ "Season": np.repeat(["This Year", "Last

我已在Plotly中创建了比例堆叠条形图,但无法使用自定义数据正确更新悬停标签

我的整个剧本是:

import pandas as pd
import numpy as np
import random

import plotly.graph_objects as go
# create the data frame
df = pd.DataFrame({
    "Season": np.repeat(["This Year", "Last Year"], 4),
    "Clothes": np.repeat(["Shorts", "T-Shirts", "Shirts", "Jeans"] * 2, 1),
    "Sales": random.sample(range(100), 8)
})

#manipulate data to obtain proportional data, each year should add to 100%
df = df.pivot(index = "Season", columns = "Clothes", values = "Sales")
LAST_YEAR_TOTAL  = df.loc[df.index == "Last Year"].melt().sum().tolist()[1]
THIS_YEAR_TOTAL  = df.loc[df.index == "This Year"].melt().sum().tolist()[1]
df.loc[df.index == "Last Year"] = df.loc[df.index == "Last Year"].div(LAST_YEAR_TOTAL).mul(100)
df.loc[df.index == "This Year"] = df.loc[df.index == "This Year"].div(THIS_YEAR_TOTAL).mul(100)

#create the proportional stacked bar chart
fig = go.Figure()
for item in df.columns:
    df_plot = df[item].reset_index().copy()

    fig.add_trace(go.Bar(x = df_plot[item], y = df_plot["Season"], 
                        orientation = "h",
                        name = item,
                        customdata = np.dstack(["Shorts", "T-Shirts", "Shirts", "Jeans"])[0],
                        hovertemplate = 
                        "Season: %{y} <br>" +
                        "Sales Percent: %{x:.0f}%<br>" +
                        "Item: %{customdata[0]}<extra></extra>"))

fig.update_layout(barmode = "stack",
                    title = "Proportion of Total Sales by Clothing Item")
fig.show()

将熊猫作为pd导入
将numpy作为np导入
随机输入
导入plotly.graph_对象作为go
#创建数据帧
df=pd.DataFrame({
“季节”:名词重复([“今年”、“去年”],4),
“衣服”:np.重复([“短裤”、“T恤”、“衬衫”、“牛仔裤”]*2,1),
“销售”:随机抽样(范围(100),8)
})
#操纵数据以获得比例数据,每年应增加到100%
df=df.pivot(index=“Season”,columns=“Cloth”,values=“Sales”)
去年总额=df.loc[df.index==“去年”].melt().sum().tolist()[1]
本年度合计=df.loc[df.index==“本年度”].melt().sum().tolist()[1]
df.loc[df.index==“去年”]=df.loc[df.index==“去年”].div(去年总计).mul(100)
df.loc[df.index==“本年”]=df.loc[df.index==“本年”].div(本年总计).mul(100)
#创建比例堆叠条形图
图=go.Figure()
对于df.columns中的项目:
df_plot=df[item].reset_index().copy()
图添加轨迹(go.Bar(x=测向图[项目],y=测向图[季节],
方向=“h”,
名称=项目,
customdata=np.dstack([“短裤”、“T恤”、“衬衫”、“牛仔裤])[0],
悬停模板=
“季节:%{y}
”+ “销售百分比:%{x:.0f}%
”+ “项:%{customdata[0]}”)) 图更新_布局(barmode=“stack”, title=“按服装项目划分的总销售额比例”) 图2(图3)
输出:

我想删除图例,并在悬停标签模板中保留衣物项目信息。正如目前所见,每个项目都会出现“短裤”

比例堆叠条形图在Plotly中似乎不是现成的选项,因此我必须将宽数据而不是长数据传递给图形,因此我无法将customdata应用于悬停标签

如果有人能建议我需要以何种形式将数据传递到
customdata
中以实现此目的,我将不胜感激,或者如果有另一种方法完全可以创建一个比例堆叠条形图,我可以在其中传递自定义悬停标签