你如何使用matplotlib函数fill_between与pandas数据帧

时间:2016-04-28 13:35:41

标签: python-3.x pandas matplotlib

我有一个有效的股票价格线图,但是我想在函数之间使用填充。我试过直接从系列传递值,也创建列表等,没有任何作用。这可能吗?

myDF = pd.read_csv('C:/Workarea/OneDrive/PyProjects/Learning/stocks_sentdex/GOOG-LON_TSCO.csv')
print(myDF)

myDF = myDF.set_index('Date')

myDF['Close'].plot()


plt.fill_between(?, 0, ?, alpha=0.3)


plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Check it out')
plt.legend()
plt.subplots_adjust(left=0.09,bottom=0.16, right=0.94,top=0.90, wspace=0.2, hspace=0)

plt.show()

我见过的所有示例都使用自己的数据或从urllib中读取。所有人都非常感谢。

1 个答案:

答案 0 :(得分:1)

import pandas as pd
import pandas_datareader.data as pdata
import matplotlib.pyplot as plt


# myDF = pd.read_csv('C:/Workarea/OneDrive/PyProjects/Learning/stocks_sentdex/GOOG-LON_TSCO.csv')
# myDF = myDF.set_index('Date')

myDF = pdata.get_data_google('LON:TSCO', start='2009-01-02', end='2009-12-31')
fig, ax = plt.subplots()
ax.fill_between(myDF.index, 0, myDF['Close'], alpha=0.3, label='LON:TSCO')
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.set_title('Check it out')
ax.legend()
fig.subplots_adjust(left=0.09,bottom=0.16, right=0.94,top=0.90, wspace=0.2, hspace=0)
fig.autofmt_xdate()
plt.show()

enter image description here

错误消息

  

TypeError:ufunc' isfinite'输入类型不支持,并且输入无法根据投射规则安全地强制转换为任何支持的类型'' safe'

如果myDF.indexmyDF['Close']是对象数组,则可能发生

。举个简单的例子,

In [110]: plt.fill_between(np.array([1,2], dtype='O'), 0, np.array([1,2], dtype='O'))
TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

有可能Date仅仅是字符串而不是类似日期时间的对象。要解决此问题,请使用pd.to_datetime(myDF['Date'])将日期字符串转换为类似日期时间的对象。

myDF = pd.read_csv('C:/Workarea/OneDrive/PyProjects/Learning/stocks_sentdex/GOOG-LON_TSCO.csv')
myDF['Date'] = pd.to_datetime(myDF['Date'])
myDF = myDF.set_index('Date')