无法使用python / matlibplot为所有标记的4行生成图例

时间:2016-11-27 19:41:15

标签: python matplotlib legend

希望Bollinger Bands(R)('高频段','滚动平均','低频段')的标签显示在图例中。但是,传奇只是将相同的标签应用于第一个(仅)列的pandas标签的每一行,' IBM'。

# Plot price values, rolling mean and Bollinger Bands (R)
ax = prices['IBM'].plot(title="Bollinger Bands")
rm_sym.plot(label='Rolling mean', ax=ax)
upper_band.plot(label='upper band', c='r', ax=ax)
lower_band.plot(label='lower band', c='r', ax=ax)
#
# Add axis labels and legend
ax.set_xlabel("Date")
ax.set_ylabel("Adjusted Closing Price")
ax.legend(loc='upper left')
plt.show()

我知道这段代码可能代表了对matlibplot如何工作的基本缺乏理解,因此特别欢迎解释。

1 个答案:

答案 0 :(得分:0)

问题很可能是upper_bandlower_band,它们没有标记。

一种选择是通过将它们作为列添加到数据框来标记它们。这将允许直接绘制数据框列。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

y  =np.random.rand(4)
yupper = y+0.2
ylower = y-0.2

df = pd.DataFrame({"price" : y, "upper": yupper, "lower": ylower})

fig, ax = plt.subplots()
df["price"].plot(label='Rolling mean', ax=ax)
df["upper"].plot(label='upper band', c='r', ax=ax)
df["lower"].plot(label='lower band', c='r', ax=ax)

ax.legend(loc='upper left')
plt.show()

否则您也可以直接绘制数据。

import matplotlib.pyplot as plt
import numpy as np

y  =np.random.rand(4)
yupper = y+0.2
ylower = y-0.2

fig, ax = plt.subplots()
ax.plot(y,      label='Rolling mean')
ax.plot(yupper, label='upper band', c='r')
ax.plot(ylower, label='lower band', c='r')

ax.legend(loc='upper left')
plt.show()

在这两种情况下,您都会获得带标签的图例。如果这还不够,我建议您阅读Matplotlib Legend Guide,它还会告诉您如何手动为图例添加标签。