如何在X轴上绘制日期和时间与Y值(Python)

时间:2018-05-30 14:43:30

标签: python matplotlib

数据

2018.05.01,01:15,1.206870,1.206920,1.206870,1.206920,0
2018.05.01,01:16,1.206910,1.206910,1.206810,1.206820,0

代码

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates    

data1 = pd.read_csv('DAT_MT_EURUSD_M1_201805.csv')

date, time, closep, highp, openp = np.loadtxt(data1, 
                                              delimiter=',',
                                              unpack = True,
                                              dtype=float,
                                              converters ={0: bytespdate2num('%Y%m%d%H:%M')})

最后有错误

  

ValueError:时间数据u'2018.05.01'与格式不匹配   '%Y%米%d%H:%M'

似乎我必须编写一个转换器函数来适应正确的日期格式,但我不知道如何。

请建议。

3 个答案:

答案 0 :(得分:0)

只需将格式更改为%Y.%m.%d就行了,你就会错过两者之间的点。

如果没有,您也可以尝试dateutil解析大部分日期格式:

import dateutil

dateutil.parser.parse(my_date_str)

答案 1 :(得分:0)

您的日期和时间之间用逗号隔开,您可以分割,这样您就会收到不正确的结果。您应该预先格式化文件以删除第一个逗号:

data = []
with open('test.txt') as f:
  for line in f:
    data.append(line.replace(',', ' ', 1))

with open('test.txt', 'w') as outf:
  outf.write(''.join(data))

# 2018.05.01 01:15,1.206870,1.206920,1.206870,1.206920,0
# 2018.05.01 01:16,1.206910,1.206910,1.206810,1.206820,0

确保您只运行一次,否则将删除更多逗号。

然后可以使用pandas(您已经使用过)将其轻松解析为时间:

df = pd.read_csv('test.txt', header=None)
pd.to_datetime(df[0])

0   2018-05-01 01:15:00
1   2018-05-01 01:16:00
Name: 0, dtype: datetime64[ns]

答案 2 :(得分:0)

您可以直接要求pd.read_csv()使用parse_date关键字参数解析日期和时间:

import pandas as pd
import matplotlib.pyplot as plt

# Read data AND parse time stamps (date + time) given by columns 0 and 1
data = pd.read_csv('data.csv', sep=',', header=None, parse_dates=[0, 1])

# Plot and save figure
plt.plot(data[[1]], data[[2, 3, 4, 5]])
plt.savefig('pandas_plot.png')

鉴于您提供的两行数据(我存储在data.csv文件中),此脚本生成下图(您可以在两个不同的日期实际看到您的数据采样):

plotting data with pandas and matplotlit