我想通过绘图来显示时间戳和数据之间的关系。在互联网上有许多例子,但它似乎并没有给我答案,我正在寻找。
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)
我应该怎么做才能对齐数据呢?我是不是完全做错了呢?如果是这样的话,最好的方法是用什么来绘制数据的时间戳?我不介意使用其他的库,比如seaborn。
谢谢你了
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()