在Python中,根据数据绘制毫秒时间戳不能很好地对齐。

问题描述 投票:0回答:1

我想通过绘图来显示时间戳和数据之间的关系。在互联网上有许多例子,但它似乎并没有给我答案,我正在寻找。

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。

谢谢你了

python pandas matplotlib plotly seaborn
1个回答
0
投票

Matplotlib的 DateFormatter 在这里可能很有用。 它将格式化一个带有 strft时间 格式字符串。

所以类似这样。

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()
© www.soinside.com 2019 - 2024. All rights reserved.