данные участка 2,5% процентили 97,5% процентили - PullRequest
3 голосов
/ 12 февраля 2020

Я работаю с данными временного ряда, поэтому для целей SO я сделаю некоторые ..

import pandas as pd
import numpy as np
from numpy.random import randint
import matplotlib.pyplot as plt

rng = pd.date_range('10/9/2018 00:00', periods=10, freq='1H')
df = pd.DataFrame({'Random_Number':randint(1, 100, 10)}, index=rng)

Если я построю график, это будет выглядеть так: df.plot()

enter image description here

Я могу напечатать значения df верхний и нижний процентили: df.quantile(0.025) df.quantile(0.975)

Но как мне добавить линии на график, чтобы представить 2,5 процентиль и 97.5 процентиль набора данных?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Вы можете сделать:

import pandas as pd
import numpy as np
from numpy.random import randint
import matplotlib.pyplot as plt

rng = pd.date_range('10/9/2018 00:00', periods=10, freq='1H')
df = pd.DataFrame({'Random_Number':randint(1, 100, 10)}, index=rng)

df.plot()
plt.hlines(df.quantile(0.025), xmin=min(rng), xmax=max(rng), linestyle="--", color="r")
plt.hlines(df.quantile(0.975), xmin=min(rng), xmax=max(rng), linestyle="--", color="r");

enter image description here

1 голос
/ 12 февраля 2020

Используйте plt.axhline для построения горизонтальной линии при заданном значении c Y (в интерактивном режиме plt.axvline для построения вертикальной линии при заданном значении c X):

import pandas as pd 
import numpy as np 
from numpy.random import randint 
import matplotlib.pyplot as plt                                                                                                                                                       

np.random.seed(10)  # added for reproductibility                                                                                                                                                                 

rng = pd.date_range('10/9/2018 00:00', periods=10, freq='1H') 
df = pd.DataFrame({'Random_Number':randint(1, 100, 10)}, index=rng)                                                                                                                   
df.plot()    

plt.axhline(df.quantile(0.025)[0])                                                                                                                                                    
plt.axhline(df.quantile(0.975)[0])                                                                                                                                                    

plt.show()

Произведенный участок:

enter image description here

...