Numpy / matplot:如何绘制第一个X%在Y%范围内?

时间:2016-03-01 07:11:35

标签: python numpy matplotlib plot statistics

假设我有以下观察结果:

1,2,3,4,5,6,7,100

现在我想制作一个情节如何按百分比分配观察结果:

  • 首先12.5%的观察结果是< = 1(8个中的1个)
  • 前50%的观察结果是< = 4(4个中的4个)
  • 首先,87.5%的观察结果是< = 7(8个中的7个)
  • 首先100%的观察结果是< = 100(8个中的8个)

我的问题:

  • 这种情节怎么称呼? (因此,每个百分位y轴上的最大观察值,x轴上的百分位数?)。一种直方图?
  • 如何在Matplotlib / Numpy中创建这种情节?

由于

1 个答案:

答案 0 :(得分:2)

我不确定这样的情节会被调用(编辑:它似乎被称为累积频率图,或类似的东西)。但是,这很容易做到。

基本上,如果您对数据进行了排序,那么观察百分比< =索引i的值仅为(i+1)/len(data)。使用满足此条件的范围创建x数组很容易。所以,例如:

from matplotlib import pylab
import numpy as np
a = np.array([1,2,3,4,5,6,7,100])
pylab.plot( np.arange(1,len(a)+1)/len(a), a,    # This part is required
            '-', drawstyle='steps' )            # This part is stylistic

给出:

plot output

如果您更喜欢x轴,请从0到100而不是0到

另请注意,这适用于您的示例数据,因为它已经排序。如果您使用未排序的数据,请先使用np.sort对其进行排序,例如:

c = np.random.randn(100)
c.sort()
pylab.plot( np.arange(1,len(c)+1)/len(c), c, '-', drawstyle='steps' )

plot output