在Python中绘制日期和值

时间:2014-07-22 05:55:04

标签: python datetime matplotlib

我有一个非常标准的数据集,包含2列,1表示日期,1表示值。我把它们分成两个阵列:

dates
['1/1/2014', '1/2/2014', '1/3/2014', ...]

values
[1423, 4321, 1234, ...]

如何在y轴上创建一个简单的折线图,在x轴上创建“日期”?

我尝试了什么:

我可以在一行中只用“值”做一个“Hello world”线图(真棒):

import numpy as np
import matplotlib.pyplot as plt

plt.plot(values)

接下来,让我们添加“日期”作为x轴。此时我被困住了。如何将我的“dates”数组(即字符串)转换为可绘制的数组?

查看示例,我相信我们应该将字符串转换为Python Date对象。让我们导入这些库:

import datetime
import matplotlib.dates

好的,现在我可以将字符串转换为日期time.strptime(dates[1], '%m/%d/%Y')。我怎样才能改变整个阵列?我可以写一个循环,但假设有更好的方法。

我不是百分百肯定我甚至正在为“日期”与“价值”创造可用的东西。如果您知道制作此图表的代码(我认为一旦您了解Python +库,我认为它非常基础),请告诉我。

3 个答案:

答案 0 :(得分:2)

好的,知道这是1班轮。以下是如何做到这一点:

所以你从你的值和日期(作为字符串)数组开始:

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)

答案 1 :(得分:1)

请记住,您可以使用xticks并使用您想要的任何内容来代替值。所以,你可以做一个

xVals = range(len(values))
plot(xVals, values)
xticks(xVals, dates)

如果您的日期与您的日期一致,则可以。否则,您始终可以获得一个数字来量化日期(从第一天开始的天数(请参阅datetime模块)并将其用于xVals

答案 2 :(得分: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()