簡體   English   中英

如何在X軸上相對於Y值繪制日期和時間(Python)

[英]How to plot date and time in X axis against Y value (Python)

數據

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%m%d%H:%M'不匹配

看來我必須編寫一個轉換器函數以適合正確的日期格式,但我不知道如何。

請提出建議。

只需將格式更改為%Y.%m.%d ,因為它們之間缺少點。

如果沒有,您也可以嘗試使用dateutil為您解析大多數日期格式:

import dateutil

dateutil.parser.parse(my_date_str)

您的日期和時間用逗號分隔,您正在使用逗號分隔,因此您得到的結果不正確。 您應該預先格式化文件以刪除第一個逗號:

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

確保只運行一次,否則將刪除更多逗號。

然后可以使用熊貓(您已經在使用)輕松地將其解析為某個時間:

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]

您可以直接要求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文件中),此腳本將產生下圖(實際上您可以在兩個不同的日期看到采樣的數據):

用pandas和matplotlit繪制數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM