在 Pandas 中绘制带有溢出箱的直方图

时间:2021-07-22 16:18:56

标签: python pandas matplotlib histogram

我有一些基于计数的数据,我想将其表示为简单的直方图。但是,我还想将超出某个阈值的外围点分组到“溢出”箱中。我不确定如何做到这一点。以下是一些示例数据:

nums = np.random.randint(1,10,100)
nums = np.append(nums, [80, 100])

mydata = pd.DataFrame(nums)
mydata.hist(bins=20)

Example plot

在这种情况下,我想将大于 10 的任何东西分组到同一个 bin 中。我最初想将超出这个阈值的值调整为相同的值(即 11),但我认为有一种更 Pythonic 的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

您可以使用 Pandas 的 .cut() 方法来制作自定义 bin:

nums = np.random.randint(1,10,100)
nums = np.append(nums, [80, 100])

mydata = pd.DataFrame(nums)

mydata["bins"] = pd.cut(mydata[0], [0,5,10,100])
mydata["bins"].value_counts().plot.bar()

enter image description here

答案 1 :(得分:0)

如果您不想或不需要解决方案中的 pandas,或者想要很大的灵活性,例如使用 x 轴标签,那么也许这是一种方法:

import numpy as np
import matplotlib.pyplot as plt

nums = np.random.randint(1, 10, 100)
nums = np.append(nums, [80, 100])

bins = [0, 5, 10, 100]
n, _ = np.histogram(mydata, bins=bins)
labels = [f'{a} to {b}' for a, b in zip(bins, bins[1:])]

fig, ax = plt.subplots()
bar = ax.bar(labels, n)
_ = ax.bar_label(bar)

这产生:

Example bar plot