gpt4 book ai didi

python - Pandas 数据框| groupby 绘图 |堆叠和并排图

转载 作者:行者123 更新时间:2023-12-04 10:50:40 24 4
gpt4 key购买 nike

我来自 R ggplot2 背景,并且在 matplotlib 图中有点困惑

这是我的数据框

languages = ['en','cs','es', 'pt', 'hi', 'en', 'es', 'es']
counties = ['us','ch','sp', 'br', 'in', 'fr', 'ar', 'pr']
count = [32, 432,43,55,6,23,455,23]
df = pd.DataFrame({'language': languages,'county': counties, 'count' : count})

language county count
0 en us 32
1 cs ch 432
2 es sp 43
3 pt br 55
4 hi in 6
5 en fr 23
6 es ar 455
7 es pr 23

现在我想绘制
  • 堆叠条形图,其中 x 轴显示语言,y 轴显示完整计数,大的总高度显示该语言的总数,堆叠条形显示该语言的国家/地区数量
  • 并排,参数相同,只有国家并排显示,而不是堆叠在一起

  • 大多数示例直接使用 dataframe 和 matplotlib plot 显示它,但我想在顺序脚本中绘制它,这样我就可以更好地控制它,也可以编辑我想要的任何东西,比如这个脚本
    ind = np.arange(df.languages.nunique())
    width = 0.35
    fig = plt.figure()
    ax = fig.add_axes([0,0,1,1])
    ax.bar(ind, df.languages, width, color='r')
    ax.bar(ind, df.count, width,bottom=df.languages, color='b')
    ax.set_ylabel('Count')
    ax.set_title('Score y language and country')
    ax.set_xticks(ind, df.languages)
    ax.set_yticks(np.arange(0, 81, 10))
    ax.legend(labels=[df.countries])
    plt.show()

    顺便说一句,我的 Pandas 枢轴代码用于相同的绘图
    df.pivot(index = "Language", columns = "Country", values = "count").plot.bar(figsize=(15,10))
    plt.xticks(rotation = 0,fontsize=18)
    plt.xlabel('Language' )
    plt.ylabel('Count ')
    plt.legend(fontsize='large', ncol=2,handleheight=1.5)
    plt.show()

    最佳答案

    import matplotlib.pyplot as plt

    languages = ['en','cs','es', 'pt', 'hi', 'en', 'es', 'es']
    counties = ['us','ch','sp', 'br', 'in', 'fr', 'ar', 'pr']
    count = [32, 432,43,55,6,23,455,23]
    df = pd.DataFrame({'language': languages,'county': counties, 'count' : count})

    modified = {}
    modified['language'] = np.unique(df.language)
    country_count = []
    total_count = []
    for x in modified['language']:
    country_count.append(len(df[df['language']==x]))
    total_count.append(df[df['language']==x]['count'].sum())

    modified['country_count'] = country_count
    modified['total_count'] = total_count

    mod_df = pd.DataFrame(modified)
    print(mod_df)

    ind = mod_df.language
    width = 0.35

    p1 = plt.bar(ind,mod_df.total_count, width)
    p2 = plt.bar(ind,mod_df.country_count, width,
    bottom=mod_df.total_count)

    plt.ylabel("Total count")
    plt.xlabel("Languages")
    plt.legend((p1[0], p2[0]), ('Total Count', 'Country Count'))
    plt.show()

    首先,将数据框修改为下面的数据框。
      language  country_count  total_count
    0 cs 1 432
    1 en 2 55
    2 es 3 521
    3 hi 1 6
    4 pt 1 55

    这是情节:

    enter image description here

    由于country count 的值很小,您无法清楚地看到堆叠的country count。

    关于python - Pandas 数据框| groupby 绘图 |堆叠和并排图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59484991/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com