Я довольно новичок в Pyplot, и я пытаюсь построить волну необработанного аудио-файла вместе с его спектрограммой.Я написал следующий код и получил результат, показанный на скриншоте ниже (код немного сокращен для удобства чтения):
fig = plt.figure(figsize=(14, 8))
sample_rate, audio = ... # rate and wave data loaded with scipy.io.wavfile.read
show_wave(audio, sample_rate, fig)
freqs, times, spec = ... # spectrogram created with scipy.signal.spectrogram
show_spectrogram(freqs, times, spec, fig)
def show_wave(audio, sample_rate, fig):
ax1 = fig.add_subplot(211)
title = ... # some title created dynamically
ax1.set_title(title)
ax1.set_ylabel('Amplitude')
ax1.set_xlabel('Audio frames')
ax1.plot(np.linspace(0, len(audio), len(audio)), audio)
return ax1
def show_spectrogram(freqs, times, spec, fig):
ax2 = fig.add_subplot(212)
extent = [times.min(), times.max(), freqs.min(), freqs.max()]
ax2.imshow(spec.T, aspect='auto', origin='lower', extent=extent)
ax2.set_yticks(freqs[::16])
ax2.set_xticks(times[::int(len(times)/10)])
ax2.set_title(...) # some title created dynamically
ax2.set_ylabel('Freqs in Hz')
ax2.set_xlabel('Seconds')
return ax2, extent
Я хочу отобразить оба графика в стопке, чтобы сравнить необработанную волну с ее спектрограммой,Тем не менее, график, созданный с помощью ax1.plot(...)
, кажется, добавляет некоторый отступ слева и справа от точек данных (нулевой тик не находится в начале осей, точки данных не охватывают всю доступную область), тогда какграфик, созданный с помощью ax2.imshow
, этого не делает (график охватывает всю область).
Как убрать «заполнение» в ax1.plot
, чтобы точки данных из необработанной волны и спектрограммы располагались вертикальновыровнен и сопоставим?
