отображение миллисекундной метки времени по сравнению с данными не соответствует хорошо в python - PullRequest
0 голосов
/ 26 мая 2020

Я хочу показать взаимосвязь между меткой времени и данными, построив их друг против друга. Есть много примеров для inte rnet, но, похоже, он не дает мне ответа, который я ищу. Ниже приведены мои образцы данных

timestamp           data 
2020-05-19 10:13:31.6     -73.2031
2020-05-19 10:13:31.7     -87.8437
2020-05-19 10:13:31.8     -87.8437
2020-05-19 10:13:31.9     -87.8437
2020-05-19 10:13:32       -87.8437
2020-05-19 10:13:32.1     -87.8437
2020-05-19 10:13:32.2     -87.8437
2020-05-19 10:13:32.3     -87.8437
2020-05-19 10:13:32.4     -87.8437
2020-05-19 10:13:32.5     -87.8437
2020-05-19 10:13:32.6     -87.8437
2020-05-19 10:13:32.7     -87.8437
2020-05-19 10:13:32.8     -87.8437
......................

2020-05-19 10:19:15.2    -92.4709 
2020-05-19 10:19:15.3    -99.9328
2020-05-19 10:19:15.4   -110.0390
2020-05-19 10:19:15.5   -118.0167
2020-05-19 10:19:15.6   -124.4937
2020-05-19 10:19:15.7   -128.2135
2020-05-19 10:19:15.8   -134.1289
2020-05-19 10:19:15.9   -138.6015
2020-05-19 10:19:16     -142.3212
2020-05-19 10:19:16.1   -146.6750
2020-05-19 10:19:16.2   -153.4466

Ниже мой код python:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

df.index = pd.to_datetime(df.timestamp,format="%Y.%m.%d %H:%M:%S.%f", dayfirst=True)
y=df['data']

fig, ax = plt.subplots(figsize=(50, 3)) #tired to increase the size,to cover all timestamps
ax = y.plot(color='xkcd:lightish blue')

plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

df.set_index('timestamp',inplace=True)
ticklabels = df.index.strftime('%Y.%m.%d %H:%M:%OS3')
ax.xaxis.set_major_formatter(ticker.FixedFormatter(ticklabels))
plt.show()

График, который я получаю, не дает мне всех отметок времени. Даже приблизительная временная метка не совпадает с данными, как видно из графика: (например, моя временная метка идет до 2020-05-19 10: 19: 16.2, но график показывает с 10:13:31: От 600 до 10: 13: 32: 100)

timestamp vs data

Что мне делать, чтобы выровнять данные? Я вообще все делаю неправильно? Если да, то как лучше всего сопоставить временную метку с данными? Я не против использовать другие библиотеки, такие как seaborn

Спасибо

1 Ответ

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

Matplotlib DateFormatter может быть здесь полезен. Он отформатирует галочку со строкой формата strftime .

Примерно так:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

import matplotlib.dates as mdates

df=pd.read_csv('time.csv',index_col='timestamp') #your data pasted into csv
df.index = pd.to_datetime(df.index)

df.index = pd.to_datetime(df.index,format="%Y.%m.%d %H:%M:%S.%f", dayfirst=True)
y=df['data']

fig, ax = plt.subplots(figsize=(9, 9))
ax = y.plot(color='xkcd:lightish blue',marker='x')

plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y.%m.%d %H:%M:%S.%f'))

plt.show()
...