Моя проблема в том, что ось X графика plt.pcolormesh(time, freq, spec, shading="gouraud") начинается не с 0, а с 22,68, а затем ось X увеличивается до 63,72.
Я понимаю, что диапазон оси X, который можно распечатать через print(time), зависит от значения nperseg scipy.signal.spectrogram. Следовательно, значение nperseg определяет возможный выходной сигнал или диапазон оси X с помощью scipy.signal.spectrogram.
Однако нет ли способа построить спектрограмму так, чтобы ось X начиналась с 0, поскольку данные временного ряда начинаются с 0 или 1 с первой точкой данных во времени?
Вот полный и воспроизводимый код:
Код: Выделить всё
import numpy as np
import scipy as sp
from scipy import signal
import matplotlib.pyplot as plt
# Data of time-series
data = [1.577914, -4.299067, 1.994959, 1.006487, -3.092386, 2.552159, 0.270319,
-0.406156, 2.364457, -2.212027, -0.985193, -2.660199, 4.171447, 1.508614,
0.710774, 0.62389, 0.157947, 0.885811, 1.126204, 2.449504, -3.167271,
-2.473564, -3.03687, 0.573946, 1.123078, -0.745824, -5.395092, -3.487601,
-1.41748, 2.737564, 2.061715, -0.249747, 2.174746, 2.229604, -4.607001,
2.951738, -1.859603, 3.03217, 0.87048, 1.842302, 5.207679, 0.3907389]
data = np.array(data)
# Spectrogram
freq, time, spec = sp.signal.spectrogram(data, fs=1/2.16,
window=('tukey', 0.25),
nperseg=21,
noverlap=None, nfft=42,
detrend=False,
return_onesided=True,
scaling="density",
axis=-1, mode="psd")
# Plot
plt.pcolormesh(time, freq, spec, shading="gouraud")
plt.colorbar()
plt.xlabel("Time [seconds]", fontweight="bold", fontsize=12)
plt.yticks(np.arange(0.01, 0.24, 0.05), fontsize=12)
plt.ylim([0.01, 0.23])
plt.ylabel("Frequency [Hz]", fontweight="bold", fontsize=12)
plt.show()
