每个箱中具有相同点数的直方图

Apo*_*llo 10 python matplotlib histogram

我有一个points100分的排序向量.我现在想要创建两个直方图:第一个直方图应该有10个具有相等宽度的区间.第二个也应该有10个直方图,但不一定宽度相等.在第二个,我只想让直方图在每个bin中具有相同的点数.因此,例如,第一个条可能非常短而宽,而直方图中的第二个条可能非常高而窄.我有使用的代码创建第一个直方图matplotlib,但现在我不知道如何创建第二个直方图.

import matplotlib.pyplot as plt
points = [1,2,3,4,5,6, ..., 99]
n, bins, patches = plt.hist(points, 10)
Run Code Online (Sandbox Code Playgroud)

编辑:

尝试下面的解决方案,我有点困惑为什么我的直方图中的所有条形的高度是相同的.

在此输入图像描述

far*_*rth 12

这个问题类似于我在一段时间内写过一个答案的问题,但是有足够的不同以保证它自己的问题.事实证明,解决方案使用了与我的其他答案基本相同的代码.

def histedges_equalN(x, nbin):
    npt = len(x)
    return np.interp(np.linspace(0, npt, nbin + 1),
                     np.arange(npt),
                     np.sort(x))

x = np.random.randn(100)
n, bins, patches = plt.hist(x, histedges_equalN(x, 10))
Run Code Online (Sandbox Code Playgroud)

这个解决方案给出了一个具有相同高度区间的直方图,因为---根据定义---直方图是每个区间中点数的计数.

要获得pdf(即密度函数),请使用normed=Truekwarg来plt.hist.正如我的另一个答案所述.

  • 感觉这真的是一个 [quantile](https://en.wikipedia.org/wiki/Quantile) 问题,解决方案是重现 np.quantile 功能:`np.quantile(x, np.linspace(0,1, nbin+1))` 可以解决问题 (2认同)