在matplotlib中绘制pandas日期
我有一个固定宽度的数据文件,里面包含日期,但当我尝试绘制数据时,日期在x轴上显示得不太对。
我的文件看起来像这样:
2014-07-10 11:49:14.377102 45
2014-07-10 11:50:14.449150 45
2014-07-10 11:51:14.521168 21
2014-07-10 11:52:14.574241 8
2014-07-10 11:53:14.646137 11
2014-07-10 11:54:14.717688 14
等等。
我使用pandas来读取这个文件。
#! /usr/bin/env python
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_fwf('myfile.log',header=None,names=['time','amount'],widths=[27,5])
data.time = pd.to_datetime(data['time'], format='%Y-%m-%d %H:%M:%S.%f')
plt.plot(data.time,data.amount)
plt.show()
所以我想问题出在从pandas转换到matplotlib的日期时间格式上,我该怎么做这个转换呢?
我也尝试直接用pandas:
data.time = pd.to_datetime(data['time'], format='%Y-%m-%d %H:%M:%S.%f')
data.set_index('time') # Fails!!
data.time.plot()
但是这样会失败,出现了:
类型错误:空的'Series':没有可绘制的数字数据。
2 个回答
7
下面的代码可以用来绘制特定股票的日期和股价。我想把日期放在横轴(x轴),把股票的价格放在纵轴(y轴)。下面的代码对我来说是有效的。
首先,把csv文件加载到一个pandas数据框中,然后只提取需要的那一列数据放到一个数组里,接着用
plt(column_on_x_axis, column_in_y_axis, linestyle)
来绘图。当然,你需要先引入matplotlib.pyplot这个库。
data = pd.readcsv(your_file.csv)
date_array = data['Date']
price_array = data['Prices']
plt.plot(date_array, price_array, linestyle = 'solid')
41
如果你用一个包含列名的列表,而不是用字符串,data.set_index 就能正常工作了。
下面的代码应该能在x轴上显示日期:
#! /usr/bin/env python
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_fwf('myfile.log',header=None,names=['time','amount'],widths=[27,5])
data.time = pd.to_datetime(data['time'], format='%Y-%m-%d %H:%M:%S.%f')
data.set_index(['time'],inplace=True)
data.plot()
#OR
plt.plot(data.index, data.amount)