[英]Matplotlib milliseconds tick in x-axis
我正在尝试使用 Matplotlib 对来自 csv 文件的时间序列数据进行 plot。 下面是 csv 文件的前几行。
YYYY-MO-DD HH-MI-SS_SSS,X,Y,Z
2019-12-15 11:01:35.000,-0.2937,0.8477,2.2274
2019-12-15 11:01:35.005,-0.2937,0.8477,2.2274
2019-12-15 11:01:35.010,-0.2937,0.8477,2.2274
2019-12-15 11:01:35.014,0.3231,-1.7574,-4.6244
2019-12-15 11:01:35.021,0.3231,-1.7574,-4.6244
2019-12-15 11:01:35.025,0.3231,-1.7574,-4.6244
2019-12-15 11:01:35.030,0.7319,-4.9294,-4.6236
2019-12-15 11:01:35.035,0.7319,-4.9294,-4.6236
间隔为 5 毫秒 (200 Hz),文件包含一秒的数据(200 行)。 我的目标是每 100 毫秒设置一次主要的 x-ticks,即:
35.000, 35.100, 35.200, ...., 35.800, 35.900
我尝试使用 dateFormatter 但无法管理。 我怎样才能做到这一点?
#import packages
from matplotlib import pyplot as plt
from matplotlib import dates
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
import pandas as pd
import numpy as np
#import math
%matplotlib inline
df = pd.read_csv("one-second.csv",index_col="YYYY-MO-DD HH-MI-SS_SSS",parse_dates=True)
fig_1, axes = plt.subplots(3, 1, figsize=(12,12),constrained_layout=True)
axes[0].plot(df['X'],color='red')
axes[0].xaxis.set_major_formatter(dates.DateFormatter("%S.%f"))
axes[0].set_title("X Signal")
axes[0].set_xlabel('Time')
axes[0].set_ylabel('Amplitude')
axes[1].plot(df['Y'],color='green')
axes[1].set_title("Y Signal")
axes[1].set_xlabel('Time')
axes[1].set_ylabel('Amplitude')
axes[2].plot(df['Z'],color='blue')
axes[2].set_title("Z Signal")
axes[2].set_xlabel('Time')
axes[2].set_ylabel('Amplitude')
这就是我目前的管理方式。
我花了一些时间来解决这个问题......
首先使用np.datetime64
创建一个日期时间数组:
custom_array=np.arange(np.datetime64('2019-12-15 11:01:35.0'), np.datetime64('2019-12-15 11:01:36.0'),dtype='datetime64[100ms]')
这将返回:
数组(['2019-12-15T11:01:35.000', '2019-12-15T11:01:35.100', '2019-12-15T11:01:35.200', '2019-12-15T11:01:35.300' , '2019-12-15T11:01:35.400', '2019-12-15T11:01:35.500', '2019-12-15T11:01:35.600', '2019-12-15T11:01:35.700', ' 2019-12-15T11:01:35.800', '2019-12-15T11:01:35.900'], dtype='datetime64[100ms]')
然后使用这个自定义数组来设置你的刻度:
axes[0].xaxis.set_ticks(custom_array) axes[0].xaxis.set_major_formatter(dates.DateFormatter("%S.%f"))
这将每 100 毫秒创建一个刻度线,从 11:01:35 开始:
最简单的方法是将 DataFrame 索引直接设置为毫秒值。 然后您可以将您喜欢的刻度指定为一个简单的范围,例如:
import pandas as pd
import numpy as np
%matplotlib inline
df = pd.read_csv("one-second.csv", parse_dates=True)
df.index = np.arange(start=0, stop=5*len(df), step=5)
df.plot(xticks=np.arange(start=0, stop=5*len(df), step=100))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.