matplotlib在条形图中分组的条形图

时间:2018-06-20 18:47:30

标签: python pandas matplotlib jupyter-notebook

我正在使用matplotlib和pandas创建条形图。 我有一个世界杯球队的数据框,这是@media print { .noPrint{display: none !important;} } 显示的内容 enter image description here

我想创建一个条形图,其中每个条形都是唯一的df.head(),并且team中的每个团队都被紧密地绘制在一起,并且各个组之间有明显的距离。 这是我目前拥有的:

group

enter image description here

出于视觉目的,我希望它看起来像这样: enter image description here

1 个答案:

答案 0 :(得分:1)

最简单的方法是重置groupby数据框的索引并使用seaborn的factorplot。

import numpy as np
import pandas as pd
import seaborn as sns

# Setting up
group_A = ['Egypt', 'Russia', 'Uruguay', 'Saudi Arabia']
group_B = ['Spain', 'Portugal', 'Iran', 'Morocco']
group_C = ['France', 'Denmark', 'Australia', 'Peru']
team = group_A + group_B + group_C
group =['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C']
caps = np.random.randint(5, 50, 12)
caps_per_team_per_group = pd.DataFrame({ 'Caps': caps}, index=pd.MultiIndex.from_tuples(list(zip(group, team)), names=['Group', 'Team']))

# Reset index and plot
caps_per_team_per_group.reset_index(inplace=True)
g = sns.factorplot(x="Group", y="Caps", hue='Team', data=caps_per_team_per_group, kind="bar", palette="muted")

n [47]: caps_per_team_per_group
Out[47]: 
                    Caps
Group Team              
A     Egypt           43
      Russia          39
      Uruguay         20
      Saudi Arabia    49
B     Spain            6
      Portugal         8
      Iran            32
      Morocco         11
C     France          14
      Denmark         41
      Australia       29
      Peru             8

enter image description here