график зависимости даты и времени от значения дает странный порядок на оси значений - PullRequest
0 голосов
/ 28 мая 2020

Учитывая данные в форме

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 отсортирована неправильно. Чтобы исправить это, я попробовал предложение из этого сообщения , но это тоже не помогло.

1 Ответ

1 голос
/ 28 мая 2020

Это может сэкономить вам время, взглянув на 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 здесь .

Пример вывода:

enter image description here

...