首页 > 解决方案 > 像在 R 中一样在 Python 中绘制 QQ 图

问题描述

当我尝试在变量 i 中绘制以下数据存储时,我遇到了麻烦。

   Dates
2015-08-21    0.032369
2015-08-24    0.040211
2015-09-01    0.030023 

Python

import statsmodels.api as sm
from matplotlib import pyplot as plt
fig = sm.qqplot(i, line='45')
plt.show()

R

r <- 0.01
spcs <- as.numeric(diff(time(i)))
qq_plot(spcs, FUN = function(p) qexp(p, rate = r)) # r = exceedance probability

在 R 中

我得到以下情节:

R中的QQ_​​PLOT

我在 colab 中分享笔记本的链接可能有助于理解问题

[Colab 链接][2]

标签: pythonrmatplotlib

解决方案


您应该改为绘制pandas系列的索引(获取 的差异DatetimeIndex,将其转换为timedelta并提取天数),如下所示,以获得正确的 qq-plot(具有适当的分布):

import statsmodels.api as sm
import scipy.stats as stats
from matplotlib import pyplot as plt

pd.to_timedelta(np.diff(i.index), unit='ns').days.values
# array([3, 8])

r = 0.01
fig = sm.qqplot(pd.to_timedelta(np.diff(i.index), unit='ns').days.values, \
                stats.expon, loc=0, scale=r)
plt.show()

在此处输入图像描述


推荐阅读