Как изобразить и обозначить несколько функций автокорреляции в Pandas? - PullRequest
1 голос
/ 06 октября 2019

У меня есть несколько переменных, и я хочу посмотреть на их автокорреляционные функции на одном графике. Я могу сделать это. Но проблема заключается в Я не уверен, как создать легенду, чтобы я знал, какая именно переменная.

Вот как выглядят мои данные:

import pandas as pd 
from pandas.plotting import autocorrelation_plot
df = pd.DataFrame(data = {
    "Year": [y for y in range(1800, 2000)],
    "Var 1": [random.random() for i in range(200)], 
    "Var 2": [random.random() for i in range(200)], 
    "Var 3": [random.random() for i in range(200)]
})

df.set_index("Year")

Теперь вот как я могу построить функции автокорреляции на одном графике:

for variable in df.columns:
    autocorrelation_plot(df[variable])

Проблема в том, что нет легенды, поэтому я не знаю, какая переменная какая.

Более того, autocorrelation_plot не имеет аргумента legend.

1 Ответ

0 голосов
/ 06 октября 2019

Попробуйте этот код:

for variable in df.columns:
    ax = autocorrelation_plot(df[variable])

ax.legend(ax.get_lines())

autocorrelation_plot возвращает объект типа AxesSubplot, который позволяет вам манипулировать графиком, как вы привыкли делать с matplotlib. Таким образом, чтобы добавить легенду, вам просто нужно передать в качестве параметра линии, которые функция только что нарисовала.

Например, с помощью этого кода я печатаю цвет каждой напечатанной строки и перехожу, чтобы изменить меткуСтрока, собирающаяся добавить строку variable:

i=0
for variable in df.columns:
    ax = autocorrelation_plot(df[variable])

    print(variable, ax.get_lines()[-1].get_color())

    for k in range(i, len(ax.get_lines())):
        ax.get_lines()[k].set_label(f'{k}_{variable}')
    i+=6

ax.legend(ax.get_lines())
...