Like World

Like's blog

使用Python画CDF图

依赖包: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?