如何用两个变量的列表绘制 CDF 和 CCDF

How to plot a CDF and CCDF with lists of two variables

[根据 w.r.t 年的更新值绘制 CCDF 图] picture。

数据集如下所示:

Year    Updated values
(2000 - 1)
(2001 - 159)
(2002 - 140)
(2003 - 160)
(2004 - 300)
(2005 - 378)
(2006 - 419)
(2007 - 401)
(2008 - 509)
(2009 - 610)
(2010 - 789)
(2011 - 856)
(2012 - 720)
(2013 - 860)
(2014 - 901)
(2015 - 1150)
(2016 - 1130)
(2017 - 1387)
(2018 - 1578)
(2019 - 2480)
(2020 - 3120)
(2021 - 5690)

我看过很多答案,但找不到太多关于使用两个变量绘制 CCDF 图的信息。我想根据年份计算更新频率的 CCDF,并希望以绘图的形式在 x 轴上显示年份标签。谢谢

你可以计算一个cdf作为数据的累加和,然后除以归一化0和1之间的值。ccdf就是1 - cdf。您可以显示它们,例如作为曲线,或作为条形图:

import matplotlib.pyplot as plt
import numpy as np

years = np.arange(2000, 2022)
values = np.array(
    [1, 159, 140, 160, 300, 378, 419, 401, 509, 610, 789, 856, 720, 860, 901, 1150, 1130, 1387, 1578, 2480, 3120, 5690])
cdf = values.cumsum() / values.sum()
ccdf = 1 - cdf
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 4))
ax1.plot(years, cdf, label='cdf')
ax1.plot(years, ccdf, label='ccdf')
ax1.legend()

ax2.bar(years, cdf, label='cdf')
ax2.bar(years, ccdf, bottom=cdf, label='ccdf')
ax2.margins(x=0.01)
ax2.set_xticks(years)
ax2.set_xticklabels([f'{y % 100:02d}' for y in years])
ax2.legend()

plt.tight_layout()
plt.show()