Matplotlib: отметка времени не отображается на оси X - PullRequest
0 голосов
/ 07 января 2019

Я хочу показать средний «поток» в час в течение 24 часов (данные собирались каждую минуту в течение нескольких недель). Мой текущий код не производит отметки времени на оси X. Мне не ясно, почему это так.

Набор данных выглядит следующим образом:

Время ____________ потока _______ _____ прием time_c

15420226756,751 ___ 0,0 __________ 1 _______ 12: 45: 56

15420227756.761__ 0,1 __________ 2 _______ 13:45:56

+15420228756,771 ___ 0,2 __________ 3 _______ 14: 40: 30

+15420229756,781 ___ 0,5 __________ 1 _______ 15: 30: 20

15420230756,791 ___ 0,6 __________ 2 _______ 15: 57: 00

import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd

flow_1810['time_c'] = pd.to_datetime(flow_1810['time'],unit='s').apply(lambda x: str(str(x).split(' ')[1]).split('.')[0])

fig, ax = plt.subplots(figsize=(15,7))
flow_1810.groupby(['time_c','maneuver']).median()['flow'].unstack().plot(ax=ax)

# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)
ax.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0,24,3)))

Это результат: enter image description here

Это формат метки времени: (int64)

enter image description here

1 Ответ

0 голосов
/ 07 января 2019

Попробуйте это:

import pandas as pd
from datetime import datetime

df=pd.read_csv('newdata2.csv')
df.time=df.time.apply(lambda x:x.replace(',',''))
df['time_c'] = df['time'].apply(lambda x:datetime.utcfromtimestamp(float(x)).strftime('%Y-%m-%d-%H'))
df.time_c=pd.to_datetime(df.time_c, format='%Y-%m-%d-%H')

df.groupby(by=['time_c']).flow.sum().plot(figsize=(14,8))

Дайте мне знать, работает ли он или нет.

...