具有 50 多个创建的虚拟变量的堆积条形图(百分比)? [关闭]

Posted

技术标签:

【中文标题】具有 50 多个创建的虚拟变量的堆积条形图(百分比)? [关闭]【英文标题】:Stacked Bar Graph (Percentage) with 50+ created dummy variables? [closed] 【发布时间】:2021-11-23 15:13:48 【问题描述】:

我正在使用 python 并且有一个包含 50 多个创建的虚拟变量的数据框。现在,我正在尝试创建一个堆积条形图(perc)来显示每个月的项目组合。这是数据框:

date       | dummy_var1 | dummy_var2 | .. | dummy_var50
2021-01-01 | 3          | 0          |    | 0
2021-02-01 | 1          | 0          |    | 0

我希望为每个日期创建一个堆积百分比条形图。但是,由于我有 50 多列并且并非所有列都有值(即 0%),我想删除给定月份的 0 列,并且只显示具有正值的列并将这些列堆叠。

最好的方法是什么?我搜索了 plotly 和 seaborn,但找不到与此用例匹配的任何内容。

【问题讨论】:

这个问题很混乱。您需要添加更多关于确切需要什么的信息。您要堆叠日期还是 dummy_vars? “dummy_var1”是一个有意义的名字吗?当您说“百分比”时,您如何定义 100%?你能把你的项目组织成有意义的组吗?你能发布你尽力而为的代码吗? 【参考方案1】: 使用此技术:Compute row percentages in pandas DataFrame? 然后使用 plotly express 变得非常简单
import pandas as pd
import numpy as np
import plotly.express as px

S = 4
df = pd.DataFrame(
    
        **"date": pd.date_range("1-jan-2021", freq="MS", periods=12),
        **
            f"dummy_vari+1": np.random.choice(
                list(range(S)),
                12,
                p=[0.9 if i == 0 else 0.1 / (S - 1) for i in range(S)],
            )
            for i in range(50)
        ,
    
)

px.bar(
    df.set_index("date").pipe(lambda d: d.div(d.sum(axis=1), axis=0)).reset_index(),
    x="date",
    y=[c for c in df.columns if c != "date"],
).update_layout(xaxis="dtick": "M1", yaxis="tickformat":".2%")

【讨论】:

以上是关于具有 50 多个创建的虚拟变量的堆积条形图(百分比)? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

R 具有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?

带有facet_grid的ggplot2中带有多个分类变量的堆积条形图

创建具有多个维度的堆积条形图

为多个变量制作堆积条形图 - R 中的 ggplot2

spss如何删除堆积条形图中的某块数据

将百分比标签添加到堆积条形图ggplot2