首页 > 解决方案 > Python:如何绘制按两列分组的值的计数?

问题描述

我有一些数据按两列分组,有一个计数列:

  Category  Subcategory  Count
0        1            1     10
1        1            2     15
2        1            3     16
3        2            1      2
4        2            2      8
5        2            3     12
6        3            1     33
7        3            3     23
8        4            2      3
9        5            1      2

我想根据上述数据绘制一个聚集柱形图。并非所有类别都包含所有子类别,因此对于这些,该图应显示 0。我想将值显示为类别中子类别的计数,以类别的百分比表示。

这是一个示例图表,其中包含 2 个类别和多个子类别作为单独的集群。我想达到类似的结果。

X

https://imge.to/i/AVUiY

附加问题:是否有可能在 Y 轴上打破比例,使异常值列(高值)变得更小,而小值变得更明显?

标签: pythonplotgroup-bycategorical-data

解决方案


我硬编码了一些东西只是为了直接进行绘图,所以首先你要从你的数据列中创建我称之为“cat1”-“cat5”的东西。

import numpy as np
import matplotlib.pyplot as plt

# data to plot
n_groups = 3  #number of subcategories
cat1 = (10,15,16)
cat2 = (2,8,12)
cat3 = (33,0,23)
cat4 = (0,3,0)
cat5 = (2,0,0)

# create plot
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.1

rects1 = plt.bar(index, cat1, bar_width, label='1')
rects2 = plt.bar(index + bar_width, cat2, bar_width, label='2')
rects3 = plt.bar(index + 2*bar_width, cat3, bar_width, label='3')
rects4 = plt.bar(index + 3*bar_width, cat4, bar_width, label='4')
rects5 = plt.bar(index + 4*bar_width, cat5, bar_width, label='5')

plt.xlabel('Subcategory')
plt.ylabel('Count')
plt.title('Count by Category')
plt.xticks(index + bar_width, ('1', '2', '3'))
plt.legend()

plt.tight_layout()
plt.show()

要回答您的第二个问题,请查看 brokenaxes 包:https ://github.com/bendichter/brokenaxes


推荐阅读