【问题标题】:plot stacked percentage barchart matplotlib绘制堆积百分比条形图 matplotlib
【发布时间】:2019-09-27 13:28:40
【问题描述】:

假设我有以下包含两列的数据框: 标签:可以是 -1、0 或 1。 years_of_expereicen: 可以是 0,1,2,3,4,5,6,7,8,9

label   SSP_years_of_experience
22640   -1.0    5.0
181487  1.0 3.0
327672  0.0 9.0
254919  0.0 6.0
136942  1.0 10.0

我的目标是使用此数据框创建一个百分比堆积条形图,其中 x 轴是经验年数,条形图是不同的颜色,每种颜色都包含一年的经验值。换句话说,我们在 x 轴上有 10 个可能的值,然后为每个不同颜色的值映射到每个标签的三个条形图。 y 轴应以百分比为单位。

我知道如何在 R(使用 ggplot)中执行此操作,但我是 matplotlib 新手,对 python 有点陌生。

我可以将两列作为变量传递的奖励点(例如x,y)。更多关于如何在图表中将每个条形中的观察次数显示为文本的奖励积分。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    如果你的数据框是pandas,试试:

    exp_name = 'year_of_experience'
    label_name = 'label'
    new_df = (df.groupby(exp_name)[label_name]
                .value_counts(normalize=True)
                .sort_index()
                .unstack()
             )
    
    new_df.plot.bar(stacked=True)
    

    玩具数据框:

    np.random.seed(0)
    df = pd.DataFrame({'label': np.random.choice([-1,0,1], size=1000, replace=True),
                       'year_of_experience': np.random.randint(0,10, 1000)})
    

    输出:

    【讨论】:

    • 加分:什么是多年经验和标签作为变量传入。在这种情况下我该怎么做?
    • 嗨 Quang Hoang,您如何显示每个栏中的观察次数?
    • @ben890 注释请参见此处:stackoverflow.com/a/50161387/1011724。另外,我建议您将所有这些都放在一个函数中,例如def plot_stacked(df, exp_name, label_name, annotations=True):
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2018-11-26
    相关资源
    最近更新 更多