2016-11-27 51 views
0

的4條線的圖例要顯示在圖例中的Bollinger Bands(R)('上帶','滾動平均線','下帶')的標籤。但是,傳說只是在第一個(唯一)列「IBM」中爲每一行使用熊貓標籤時使用相同的標籤。無法使用python/matlibplot生成所有標爲

# 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

如何嘗試'plt.legend(loc ='左上')' – mikeqfu

回答

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這也告訴你如何手動添加標籤到圖例。