我正在处理音频时间序列,并希望更好地标记正在绘制的区域。我相信这个问题对于在 中标记时间序列数据是一般性的matplotlib,但我也使用它librosa.display.waveplot来最初绘制波形可能很重要。目前,我可以使用librosaand matplotlib(在 jupyter 笔记本中)制作以下情节:
我使用的代码如下,其中x[1]是一个包含音频数据(可能是立体声)的简单向量,并且target_len是经过一些过滤重复 3 次的录音的长度。音频文件是使用导入的x, Fs = librosa.load("audiofile.wav", mono=False)
plt.figure(figsize=(12, 3))
librosa.display.waveplot(x[1], sr=Fs, color='black')
plt.xlabel('Time (seconds)')
plt.ylabel('Amplitude')
plt.axvspan(0, target_len, color = 'magenta', alpha=0.5, zorder=-100)
plt.axvspan(target_len, target_len*2, color = 'yellow', alpha=0.5, zorder=-100)
plt.axvspan(target_len*2, target_len*3,color = 'blue', alpha=0.5, zorder=-100)
plt.tight_layout()
我在音频波形正上方绘制矩形的尝试失败了,我能做的最好的事情是在 librosa 生成的音频图形上方创建另一个图形,使用补丁绘制一个矩形。不幸的是,矩形被放置在离我想要的地方太远的地方。
这个矩形的代码在这里(ax.axis('off')注释掉了,所以你可以看到这个图的位置很差):
from matplotlib.patches import Rectangle
fig = plt.figure(figsize=(12,3))
ax = fig.add_subplot(111)
ax.add_patch(Rectangle((0.04, 0), 0.35, 0.05, facecolor="black"))
#ax.axis('off')
plt.tight_layout
同样,这个问题基本上是关于matplotlib图形注释,特别是关于如何注释librosa(或任何其他 matplotlib 消费者)制作的图。似乎librosa将它自己的一些格式应用于该图形,因此它与我尝试在其上方的新图形中绘制的内容不一致。



