在matplotlib中绘制pandas日期

28 投票
2 回答
86117 浏览
提问于 2025-04-18 18:00

我有一个固定宽度的数据文件,里面包含日期,但当我尝试绘制数据时,日期在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)

撰写回答