绘制音频波形和频谱图重叠
Posted
技术标签:
【中文标题】绘制音频波形和频谱图重叠【英文标题】:Plot audio waveform and spectrogram overlap 【发布时间】:2019-12-11 21:59:44 【问题描述】:我正在使用 librosa 处理音频,我需要在同一个显示器中绘制频谱图和波形。
我的代码:
plt.figure(figsize=(14, 9))
plt.figure(1)
plt.subplot(211)
plt.title('Spectrogram')
librosa.display.specshow(stft_db, x_axis='time', y_axis='log')
plt.subplot(212)
plt.title('Audioform')
librosa.display.waveplot(y, sr=sr)
使用这段代码我得到了这个情节
但我需要这样的东西
【问题讨论】:
【参考方案1】:根据 librosa,您可以为显示方法提供一个轴来绘制项目,specshow、waveplot。我建议直接定义你的 matplotlib 图形和子图,然后给 librosa 绘制它们的坐标轴。
fig = plt.figure(figsize=(14, 9)) #This setups the figure
ax1 = fig.subplots() #Creates the Axes object to display one of the plots
ax2 = ax1.twinx() #Creates a second Axes object that shares the x-axis
librosa.display.specshow(stft_db, x_axis='time', y_axis='log', ax=ax1)
librosa.display.waveplot(y, sr=sr, ax=ax2)
plt.show()
可能需要进行更多格式化以获得所需的外观,我建议查看 matplotlib 中的this example,以获得类似的共享轴图。
【讨论】:
感谢乔的快速回复!效果很好!【参考方案2】:不使用子图,而是使用单个图的相同轴来显示两个图。
fig = plt.figure(figsize=(14, 9))
ax = librosa.display.specshow(stft_db, x_axis='time', y_axis='log')
librosa.display.waveplot(y, sr=sr, ax=ax)
plt.show()
【讨论】:
以上是关于绘制音频波形和频谱图重叠的主要内容,如果未能解决你的问题,请参考以下文章
Labview波形图 怎么做到不把绘制出来的图像删除 直接在上面绘制新的图形