依赖包:numpy, matplotlib, statsmodels
- 可以使用sudo apt-get install python-numpy python-matplotlib安装前两个
- ubuntu 12.04里没新版的statsmodels,使用pip安装。它依赖于pandas和patsy,都可以通过pip安装
实现代码借鉴于参考文献[1]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #!/usr/bin/env python
# encoding: utf-8
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import sys
def cdf_plot(data, name, number):
"""
data: 一组数据
name: 在legend上显示的名称
number: 数据最大最小值之间划分多少段
"""
ecdf = sm.distributions.ECDF(data)
x = np.linspace(min(data), max(data), number)
y = ecdf(x)
#plt.step(x, y, label=name)
plt.plot(x, y, label=name)
def main():
for f in sys.argv[1:]:
data = open(f).readlines()
data = map(float, data)
cdf_plot(data, f, 100)
#plt.xscale('log')
plt.legend(bbox_to_anchor=(0.65, 0.3), loc=2, borderaxespad=0.)
plt.show() #显示CDF图
if __name__ == '__main__':
main()
|
将代码保存为cdf.py,即可运行。后面跟几个文件,每个文件全是数据
1
| ./cdf.py data1 data2 data3
|
References
[1] How to plot empirical cdf in matplotlib in Python?