在Python中绘制日期与数值
我有一个很标准的数据集,里面有两列,一列是日期,另一列是数值。我把它们放进了两个数组里:
dates
['1/1/2014', '1/2/2014', '1/3/2014', ...]
values
[1423, 4321, 1234, ...]
我该如何创建一个简单的折线图,把“数值”放在y轴上,把“日期”放在x轴上呢?
我尝试过的:
我可以用一行代码画出一个只有“数值”的“你好,世界”折线图(太棒了):
import numpy as np
import matplotlib.pyplot as plt
plt.plot(values)
接下来,我们来把“日期”加到x轴上。到这里我就卡住了。怎么把我的“日期”数组(它是字符串形式)转换成可以绘图的数组呢?
看了一些例子,我觉得我们应该把字符串转换成Python的日期对象。让我们导入那些库:
import datetime
import matplotlib.dates
好的,现在我可以把一个字符串转换成日期 time.strptime(dates[1], '%m/%d/%Y')
。那我怎么把整个数组都转换呢?我可以写个循环,但我觉得应该有更好的方法。
我不太确定我是不是在朝着正确的方向走,以便能把“日期”和“数值”结合起来。如果你知道怎么写代码来画这个图(我猜一旦你掌握了Python和相关库,这应该很简单),请告诉我。
3 个回答
1
记住,你可以使用 xticks
,并且可以随意替换值。所以,你可以这样做:
xVals = range(len(values))
plot(xVals, values)
xticks(xVals, dates)
如果你的日期是线性的,就像你现在这样,那这样做是没问题的。否则,你可以通过一个数字来表示日期(比如从第一天起的天数,参考一下 datetime
模块),然后用这个数字来作为 xVals
。
1
这是我的代码:
date = []
for time_val in value:
date.append(datetime(*time.strptime(time_val, "%m/%d/%Y")[:3]))
fig, ax = plt.subplots()
ax.plot_date(date, value_list)
date_format = mdates.DateFormatter("%m/%d/%Y")
ax.xaxis.set_major_formatter(date_format)
ax.autoscale_view()
title_name = 'plot based on time'
ax.set_title(title_name)
y_label = 'values'
ax.set_ylabel(y_label)
ax.grid(True)
fig.autofmt_xdate()
plt.show()
6
好的,我知道这可以用一行代码解决。下面是怎么做的:
首先,你需要准备好你的值和日期(以字符串形式)的数组:
dates = ['1/1/2014', '1/2/2014', '1/3/2014', ...]
values = [1423, 4321, 1234, ...]
接着,把你的日期字符串转换成日期对象:
date_objects = [datetime.strptime(date, '%m/%d/%Y').date() for date in dates]
然后就可以直接绘图了。
plt.plot(date_objects, values)