在Python中绘制日期与数值

5 投票
3 回答
16424 浏览
提问于 2025-04-18 14:13

我有一个很标准的数据集,里面有两列,一列是日期,另一列是数值。我把它们放进了两个数组里:

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)

撰写回答