首页 > 解决方案 > 日期时间与值图在值轴上给出了奇怪的顺序

问题描述

给定表格数据

Wed May 27 18:00:02 2020    2029.63
Wed May 27 19:00:04 2020    2029.63
Wed May 27 20:00:06 2020    2029.63
Wed May 27 21:00:04 2020    2029.63
Wed May 27 22:00:03 2020    2029.63
Wed May 27 23:00:03 2020    1663.70
Thu May 28 00:00:05 2020    1663.70
Thu May 28 01:00:04 2020    1663.70
Thu May 28 02:00:03 2020    1663.70
Thu May 28 13:00:04 2020    2029.63
Thu May 28 14:00:06 2020    2029.63
Thu May 28 15:00:04 2020    2029.63
Thu May 28 16:00:02 2020    2029.63
Thu May 28 17:00:06 2020    2029.63
Thu May 28 18:00:03 2020    2029.63
Thu May 28 19:00:09 2020    2029.63

我正在尝试创建一个绘图日期/时间与值。我的方法非常简单(虽然有点老套......)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import datetime

data = open("data.txt").read().split("\n")
data = [x for x in data if x!='']

date = []
values = []

for line in data:
    index = line.find("\t")
    time_str = str(line[4:index])
    date_time_obj = datetime.datetime.strptime(time_str, '%b  %d %H:%M:%S %Y')
    date.append(date_time_obj)
    values.append(line[index+1:])

#dates = mpl.dates.date2num(date)
dates = [x.date() for x in date]

dates_sorted, values_sorted = zip(*sorted(zip(dates, values)))

fig = plt.figure()
plt.plot(dates_sorted, values_sorted, 'ro')
fig.autofmt_xdate()
plt.show() 

这会产生一个图,但不幸的是value-axis 没有正确排序。为了解决这个问题,我尝试了这篇文章中的建议,但这也没有帮助。

标签: pythondatetimeplot

解决方案


它可能会为您节省一些时间来看看pandas

import io
import pandas as pd

s = """Timestamp,Value
Wed May 27 18:00:02 2020,2029.63
Wed May 27 19:00:04 2020,2029.63
Wed May 27 20:00:06 2020,2029.63
Wed May 27 21:00:04 2020,2029.63
Wed May 27 22:00:03 2020,2029.63
Wed May 27 23:00:03 2020,1663.70
Thu May 28 00:00:05 2020,1663.70
Thu May 28 01:00:04 2020,1663.70
Thu May 28 02:00:03 2020,1663.70
Thu May 28 13:00:04 2020,2029.63
Thu May 28 14:00:06 2020,2029.63
Thu May 28 15:00:04 2020,2029.63
Thu May 28 16:00:02 2020,2029.63
Thu May 28 17:00:06 2020,2029.63
Thu May 28 18:00:03 2020,2029.63
Thu May 28 19:00:09 2020,2029.63"""

df = pd.read_csv(io.StringIO(s), parse_dates=['Timestamp'])

df.plot(x='Timestamp', y='Value')

只需将io.String文件的路径替换为您的数据即可。pd.DataFrame.plot 在此处查找更多信息。

示例输出:

在此处输入图像描述


推荐阅读