我有一个非常标准的数据集,包含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 +库,我认为它非常基础),请告诉我。
答案 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()