Как построить данные, время по оси x, а не datetime - PullRequest
0 голосов
/ 06 мая 2020
   id        timestamp          energy
0   a   2012-03-18 10:00:00     0.034
1   b   2012-03-20 10:30:00     0.052
2   c   2013-05-29 11:00:00     0.055
3   d   2014-06-20 01:00:00     0.028
4   a   2015-02-10 12:00:00     0.069

Я хочу изобразить эти данные, как показано ниже. просто время по оси X, а не дата и время.

, потому что я хочу видеть значения за каждый час.

https://i.stack.imgur.com/u73eJ.png

но этот код выглядит следующим образом.

plt.plot(df['timestamp'], df['energy'])

https://i.stack.imgur.com/yd6NL.png

Я пробовал несколько кодов, но они просто форматируют часть даты, скрывающую данные X, и строят как второй график .

+ df ['timestamp'] - это тип datetime.

что мне делать? Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Сначала проверьте, если тип df["timestamp"] находится в формате datetime. если нет

import pandas as pd  
time = pd.to_datetime(df["timestamp"])
print(type(time))

Тогда

import matplotlib.pyplot as plt
values = df['energy']
plt.plot_date(dates , values )
plt.xticks(rotation=45)
plt.show()
0 голосов
/ 06 мая 2020

вы можете преобразовать дату и время во время, если ваш df["timestamp"] уже находится в формате datetime, тогда

df["time"] = df["timestamp"].map(lambda x: x.time())
plt.plot(df['time'], df['energy'])

, если df["timestamp"] имеет строку типа, вы можете добавить еще одну строку вперед как df["timestamp"] = pd.to_datetime(df["timestamp"])

Обновление: похоже, что matplotlib не принимает типы time, просто конвертируйте в string

df["time"] = df["timestamp"].map(lambda x: x.strftime("%H:%M"))
plt.scatter(df['time'], df['energy'])
...