我在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()
输出:
我想删除图例,只是有悬停标签模板中的服装项目信息。可以看出,目前'短裤'出现在每个项目。
比例堆积条形图在plotly中似乎不是现成的选项,因此我必须将宽数据而不是长数据传递给图形,因此我无法将customdata应用于悬停标签。
如果有人能告诉我需要用什么形式传递数据 customdata
为了实现这一点,我将不胜感激,或者如果有另一种方法完全创建一个比例堆积条形图,我可以通过自定义悬停标签。
暂无答案!
目前还没有任何答案,快来回答吧!