希望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如何工作的基本缺乏理解,因此特别欢迎解释。
答案 0 :(得分:0)
问题很可能是upper_band
和lower_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,它还会告诉您如何手动为图例添加标签。