我正在尝试绘制以4,000Hz采样的数组(specgram
)的my_array
。
在此示例中,数据是在2019年5月15日的11分中从08:41到08:52收集的。
我正在使用熊猫从csv文件中提取数据,但是为了创建reprex,我从头开始创建了一个unix时间戳的时间数组(my_times
):
import matplotlib.pyplot as plt
import matplotlib.ticker as tick
import datetime
import numpy as np
SR=4000 #sampling rate
my_times = np.arange(1557909700.221257,1557910338.095864,0.00025)
my_array = np.random.rand(my_times.shape[0])
我想绘制频谱图(matplotlib.pyplot.specgram
),但我不想代表横坐标上的垃圾箱数量,而是要表示实际时间。
这是我当前的代码,灵感来自this SO post:
Pxx, freqs, bins, im=plt.specgram(my_array,Fs=SR, NFFT=8192, scale_by_freq='True', detrend='mean', scale='dB')
ax=plt.gca()
def timeTicks(my_times, pos):
return datetime.datetime.utcfromtimestamp(my_times).strftime("%H:%M:%S")
formatter = tick.FuncFormatter(timeTicks)
ax.xaxis.set_major_formatter(formatter)
plt.ylabel('Frequency (Hz)')
plt.xlabel('Time (hh:mm:ss)')
此代码产生以下图:
我的问题是,此处给出的时间始于00:00。我如何绘制“绝对”时间,即 我的绘制从08:42开始?
我不太了解FuncFormatter的工作原理。任何帮助将不胜感激!