Numpy/matplot: 如何绘制第一个 X% 在 Y% 范围内?
Numpy/matplot: How to plot First X% is in range Y%?
假设我有以下观察结果:
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 中创建这样的情节?
谢谢
我不确定这样的图会被称为什么(编辑:它似乎被称为累积频率图,或类似的东西)。然而,这很容易做到。
从本质上讲,如果您对数据进行了排序,那么观察值 <= 索引 i
处的值的百分比仅为 (i+1)/len(data)
。使用满足此条件的 arange 创建 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
给出:
如果您希望 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' )
假设我有以下观察结果:
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 中创建这样的情节?
谢谢
我不确定这样的图会被称为什么(编辑:它似乎被称为累积频率图,或类似的东西)。然而,这很容易做到。
从本质上讲,如果您对数据进行了排序,那么观察值 <= 索引 i
处的值的百分比仅为 (i+1)/len(data)
。使用满足此条件的 arange 创建 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
给出:
如果您希望 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' )