如何在 Pandas 中绘制和标记多个自相关函数?

Posted

技术标签:

【中文标题】如何在 Pandas 中绘制和标记多个自相关函数?【英文标题】:How plot and label multiple autocorrelation functions in Pandas? 【发布时间】:2020-02-03 18:09:21 【问题描述】:

我有几个变量,我想在一张图上查看它们的自相关函数。我可以做这个。但问题是我不确定如何创建图例以便知道哪个变量是哪个。

这是我的数据的样子:

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】:

我添加了一个标签变量来获取标签:

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

Stocks data

成功了

【讨论】:

【参考方案2】:

试试这个代码:

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())

【讨论】:

【参考方案3】:

我即兴创作了来自@Massifox 的答案,我能够为自相关图定制一个图例

from matplotlib.lines import Line2D
plot_color = []
for variable in df.columns:
    ax = autocorrelation_plot(df[variable])
    plot_color.append((ax.get_lines()[-1].get_color()))

custom_lines = [Line2D([0],[0], color=plot_color [0], lw=2),
                Line2D([0],[0], color=plot_color [1], lw=2),
                Line2D([0],[0], color=plot_color [2], lw=2)]
                
ax.legend(custom_lines, ['label1', 'label2', 'label3'])

Example Autocorrelation Plot

【讨论】:

以上是关于如何在 Pandas 中绘制和标记多个自相关函数?的主要内容,如果未能解决你的问题,请参考以下文章

Python绘制时间序列数据的时序图自相关图和偏自相关图

如何在自定义地图上绘制地理编码位置?

如何从 Pandas 数据框中绘制多个折线图

如何在android中的谷歌地图上绘制路线并计算多个标记之间的距离

如何从Pandas数据框中绘制多个折线图

尝试使用通过EJS传递给客户端的数据绘制多个Google Map标记/信息窗口时,initMap()不是一个函数