python - 难以使用 statsmodels Python 包设置图例

标签 python matplotlib plot legend statsmodels

我目前正在使用 statsmodels Python 包来绘制我拥有的两项 Assets 的自相关图(这是我硕士类(class)的一部分,用于财务分配),但我在设置图例时遇到了问题,因此标记对应于实际 Assets 。例如,蓝色标记对应“ Assets A”,而绿色标记对应“ Assets B”。然而,另外两条线不断出现在图例中,我不知何故无法摆脱它们!我想要做的就是有一个图例,其中有两个标记对应于每个 Assets ,但处理这个包的情节到目前为止绝对是一场噩梦,而且比处理 matplotlib 或我曾经偶然发现的任何东西都难得多前!我目前的代码如下:

acf_assetA=sm.tsa.stattools.acf(returns_assetA,nlags=40)
acf_assetB=sm.tsa.stattools.acf(returns_assetB,nlags=40)
legendA='Asset A'
legendB='Asset B'
legendC='Asset C'
legendD='Asset B'
autocorr_plot1,ax1=plt.subplots(figsize=(6,5))
ax1.set_xlabel('Lag')
autocorr_plot1=sm.tsa.graphics.plot_acf(returns_assetA,ax=ax1,lags=np.arange(40),label='Asset A')
autocorr_plot2=sm.tsa.graphics.plot_acf(returns_assetB,ax=ax1,lags=np.arange(40),label='Asset B')
ax1.legend([legendA,legendB,legendC,legendD],loc='best',shadow=True)

return autocorr_plot1, autocorr_plot2, acf_assetA, acf_assetB

知道这一点很有用

returns_assetA, returns_assetB

只是 Pandas 数据框中包含的我的 Assets 的返回。

这就是我不断获得的情节的样子(忽略图例的“ Assets C”部分 - 我只是简单地说,因为我一直被迫为我的图例包含四个输入,以便绿色标记出现):

如能就此图例问题提供任何形式的帮助,我们将不胜感激。非常感谢您!

最佳答案

plot_acf 函数在 Canvas 上创建了 3 个对象:
[ZL] 零线,
[P]相关点,
[VL] 连接点到零的垂直线。

他们在传说中的出现方式是
[ZL1] [P1] [ZL2] [P2] .. [ZLn] [Pn] [VL1] [VL2] .. [VLn]

enter image description here

因此,我们的想法是仅从这些句柄中选择所需的句柄。因此我们首先要得到所有的句柄和标签

handles, labels= ax1.get_legend_handles_labels()  

然后首先放下最后的 len(handles)//3 项(垂直线)。

handles=handles[:-len(handles)//3]  

我们只会选择从 1 开始的所有其他项目。

handles=handles[1::2]

这就是完整解决方案的样子:

import numpy as np
import statsmodels.tsa.stattools, statsmodels.graphics.tsaplots
import matplotlib.pyplot as plt

autocorr_plot1,ax1=plt.subplots(figsize=(6,5))
ax1.set_xlabel('Lag')

autocorr_plot1=statsmodels.graphics.tsaplots.plot_acf(np.random.rand(16),ax=ax1, label='Asset A')
autocorr_plot2=statsmodels.graphics.tsaplots.plot_acf(np.random.rand(16),ax=ax1, label='Asset B')
#uncomment for testing purposes
#autocorr_plot3=statsmodels.graphics.tsaplots.plot_acf(np.random.rand(16),ax=ax1, label='Asset C')
#autocorr_plot4=statsmodels.graphics.tsaplots.plot_acf(np.random.rand(16),ax=ax1, label='Asset D')

handles, labels= ax1.get_legend_handles_labels()
handles=handles[:-len(handles)//3][1::2]
labels =labels[:-len(handles)//3][1::2]
ax1.legend(handles=handles, labels=labels,loc='best',shadow=True, numpoints=2)

plt.show()

enter image description here

关于python - 难以使用 statsmodels Python 包设置图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42464729/

相关文章:

python - cx_Freeze 可执行文件之间的公共(public) lib 文件夹

python - 在 kivy 中,如何控制 TextInput 使用的 VKeyboard 的高度

python - 更改 SHAP 图的纵横比

python - 从 matplotlib 中的元组列表中绘制 3d 表面

java - 跳过打印 iText/JFreeChart 条形图 x 轴上的每个第 n 个值?

r - ggplot2:更改 facet_grid 图中的 strip.text 位置

plot - 增加 Julia 图中的标签大小

python - SelectKBest 与 GaussianNB 结果不精确/一致

python - 如何通过重新排序 reshape numpy 数组?

python - matplotlib 移动颜色条