如何在Plotly中创建百分比堆叠的条形图?

发布于 2025-02-13 15:23:04 字数 309 浏览 3 评论 0原文

我有此代码,但想创建一个堆叠的%条形图。我该怎么做?

fig = px.bar(df, x='date', y=['var1','var2','var3', 'var4'],barmode='stack')
fig.show()

I have this code but want to create a stacked % bar chart. How would I do that?

fig = px.bar(df, x='date', y=['var1','var2','var3', 'var4'],barmode='stack')
fig.show()

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唔猫 2025-02-20 15:23:05

我认为您应该制作一个新列来计算每个var,然后使用它来部署图表。请参考我的下面代码:

import pandas as pd
import numpy as np
from datetime import datetime as dt
import plotly.express as px

df = pd.DataFrame({
    'date': ['2022-01-07','2022-02-07','2022-03-07','2022-04-07','2022-05-07','2022-06-07','2022-07-07','2022-08-07'],
    'var1': [5,7,2,4,6,8,10,9],
    'var2': [6,7,8,5,2,6,3,1],
    'var3':[8,5,6,2,8,3,5,4],
    'var4':[7,9,7,5,3,4,2,1]})

df_melt = df.melt(id_vars=['date'],var_name='var',value_name='Amount',value_vars=df.columns[1:],ignore_index=True)

df_melt['%'] = 100 * df_melt['Amount'] / df_melt.groupby('date')['Amount'].transform('sum')

fig = px.bar(df_melt, x="date", y="%",color='var',
        title="Bar Plot", 
        template="plotly_white")   
fig.update_layout(barmode="relative")
fig.update_layout(plot_bgcolor='white')
fig.update_yaxes(showline=False,showgrid=False)
fig.update_xaxes(showline=False,showgrid=False)
fig.show()

这是输出:

I think you should make a new column that calculate % of each var and then use it to deploy chart. Please refer my below code:

import pandas as pd
import numpy as np
from datetime import datetime as dt
import plotly.express as px

df = pd.DataFrame({
    'date': ['2022-01-07','2022-02-07','2022-03-07','2022-04-07','2022-05-07','2022-06-07','2022-07-07','2022-08-07'],
    'var1': [5,7,2,4,6,8,10,9],
    'var2': [6,7,8,5,2,6,3,1],
    'var3':[8,5,6,2,8,3,5,4],
    'var4':[7,9,7,5,3,4,2,1]})

df_melt = df.melt(id_vars=['date'],var_name='var',value_name='Amount',value_vars=df.columns[1:],ignore_index=True)

df_melt['%'] = 100 * df_melt['Amount'] / df_melt.groupby('date')['Amount'].transform('sum')

fig = px.bar(df_melt, x="date", y="%",color='var',
        title="Bar Plot", 
        template="plotly_white")   
fig.update_layout(barmode="relative")
fig.update_layout(plot_bgcolor='white')
fig.update_yaxes(showline=False,showgrid=False)
fig.update_xaxes(showline=False,showgrid=False)
fig.show()

And here is the Output:
enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文