我正在使用matplotlib和pandas创建条形图。
我有一个世界杯球队的数据框,这是@media print {
.noPrint{display: none !important;}
}
显示的内容
我想创建一个条形图,其中每个条形都是唯一的df.head()
,并且team
中的每个团队都被紧密地绘制在一起,并且各个组之间有明显的距离。
这是我目前拥有的:
group
答案 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