在GroupBY之后显示很多图

时间:2020-10-11 13:58:32

标签: python pandas matplotlib

我有结构的数据。

data = [
 ['A', 'Frodo', 'group_1', 1, 1],
 ['A', 'Sam', 'group_2', 1, 1],
 ['N', 'Frodo', 'group_1', 1, 2],
 ['A', 'Sam', 'group_2', 1, 2],
 ['Z', 'Frodo', 'group_1', 1, 3],
 ['N', 'Sam', 'group_2', 1, 3],
 ['M', 'Frodo', 'group_1', 1, 4],
 ['Z', 'Sam', 'group_2', 1, 4],
 ['O', 'Frodo', 'group_1', 1, 5],
 ['A', 'Sam', 'group_2', 1, 5]]
df = pd.DataFrame(data, columns=['vote', 'name', 'group', 'meeting', 'present'])

我按人分组,并以百分比表示他的投票数。一个问题是我有213个人,但我不知道如何将其分组。因为在我的计算机上为每个人创建图形都需要很长时间。

grouped = df.groupby(['name'])
print('Number of plots = {}'.format(grouped.ngroups)) # have 213 persons
# on example plt.subplots(2, 9, figsize=(15, 10), constrained_layout=True)
fig, axes = plt.subplots(??, ??, figsize=(??, ??), constrained_layout=True)
fig.suptitle('Title graph', fontsize=15)
for i, (name, item) in enumerate(grouped):
    ix = np.unravel_index(i, axes.shape)
    parta_per = item['vote'].value_counts() / item['vote'].shape * 100
    parta_per = parta_per.sort_index()
    parta_per = pd.DataFrame(parta_per).transpose()
    parta_per.plot(kind='bar', ax=axes[ix], label='', title=name)

结果应该看起来像图片,只有图形数量为213。我将用图例写入数据,而不是“投票”。结果,数据以可读的形式可视化。 enter image description here

是否可以将一行中的图合并为一张图?还是有其他解决方案?

0 个答案:

没有答案