gpt4 book ai didi

python - 删除 Matplotlib 中数据点周围的填充

转载 作者:行者123 更新时间:2023-12-01 09:26:43 25 4
gpt4 key购买 nike

我对 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中的“​​填充”,以便原始波和频谱图中的数据点垂直对齐并具有可比性?

Raw wave and spectrogram of audio file

最佳答案

使用 ax1.set_xlim(0, len(audio)) 强制 xaxis 的边界从 0 到 len(audio) 这就是您的数据实际上跨越,这将消除您看到的“填充”。

关于python - 删除 Matplotlib 中数据点周围的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50330127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com