Я пытаюсь построить specgram
массива (my_array
) с частотой дискретизации 4000 Гц.В этом примере данные были собраны 15 мая 2019 года в течение 11 минут, с 08:41 до 08: 52.
Я извлекаю свои данные из файла CSV, используя панд, но ради создания представ , я создаю временной массив (my_times
) с отметками времени Unix с нуля:
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
), но вместоотображая количество бинов на абсциссе, я хотел бы представить фактическое время.
Это мой текущий код, вдохновленный этой публикацией SO :
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.Любая помощь будет оценена!