librosa.display.waveshow()将图与图直接的间距变宽
时间: 2024-03-21 22:42:15 浏览: 140
librosa.display.waveshow()函数是用于绘制音频波形图的,它默认的间距是比较紧凑的。如果你想要增加图与图之间的间距,可以使用matplotlib库中的subplots_adjust()函数,通过调整子图之间的间距来实现。
例如,你可以在绘制完波形图后,再调用subplots_adjust()函数来调整间距,如下所示:
```
import librosa
import librosa.display
import matplotlib.pyplot as plt
y, sr = librosa.load('your_audio_file.wav')
plt.figure(figsize=(10, 4))
librosa.display.waveshow(y, sr=sr)
plt.subplots_adjust(hspace=0.5) # 调整子图之间的垂直间距
plt.show()
```
在上面的例子中,我们在绘制完波形图后,调用了subplots_adjust()函数来增加了子图之间的垂直间距,从而实现了图与图之间的间距变宽。你可以根据自己的需求调整间距的大小。
相关问题
import librosa filepath = 'D:\\360se6\\bishe\\古筝\\' filename = filepath + 'gz1.wav' y, sr = librosa.load(filename,sr = None ) import librosa import matplotlib.pyplot as plt import librosa.display import numpy as np filepath = 'D:\\360se6\\bishe\\古筝\\' filename = filepath + 'gz1.wav' tempo, beats = librosa.beat.beat_track(y=y, sr=sr) y_beats = librosa.clicks(frames=beats, sr=sr) y_beats = librosa.clicks(frames=beats, sr=sr, length=len(y)) times = librosa.frames_to_time(beats, sr=sr) y_beat_times = librosa.clicks(times=times, sr=sr) y_beat_times880 = librosa.clicks(times=times, sr=sr, click_freq=880, click_duration=0.5) plt.figure() S = librosa.feature.melspectrogram(y=y, sr=sr) ax = plt.subplot(2, 1, 2) librosa.display.specshow(librosa.power_to_db(S, ref=np.max), x_axis='time', y_axis='mel') plt.subplot(2, 1, 1, sharex=ax) librosa.display.waveshow(y_beat_times, sr=sr, label='Beat clicks') plt.legend() plt.xlim(15, 30) plt.tight_layout()
这段代码使用了Python中的librosa库,通过加载音频文件,提取其节拍信息并在节拍处插入点击声,最后绘制出音频的梅尔频谱图和节拍位置的波形图。其中,`filepath`和`filename`分别指定了音频文件所在的文件夹路径和文件名,`y`和`sr`则是通过`librosa.load`函数加载音频文件后返回的音频信号和采样率。接下来,`tempo`和`beats`分别使用`librosa.beat.beat_track`函数获取音频的节奏信息。然后,`y_beats`通过`librosa.clicks`函数在节拍位置产生了一个长度与音频相同的点击声信号,`y_beat_times`和`y_beat_times880`分别使用`librosa.clicks`函数在节拍位置产生了一个与时间轴对应的点击声信号。最后,`librosa.feature.melspectrogram`函数用于提取梅尔频谱图,`librosa.display.specshow`函数和`librosa.display.waveshow`函数用于绘制出梅尔频谱图和节拍位置的波形图。
Traceback (most recent call last): File "D:\eda\789.py", line 17, in <module> librosa.display.waveshow(librosa.power_to_db(S, ref=np.max), axis='time', y_axis='mel')
这个错误提示表明在调用 librosa.display.waveshow() 函数时,传递的参数有误。可能是输入的 S 矩阵的维度不正确导致的。建议检查代码,确保 S 矩阵的维度正确。
另外,该函数需要传递一个二维数组作为输入,表示音频信号的频谱。如果 S 矩阵不是二维数组,需要将其转换成二维数组。可以使用 numpy.reshape() 函数来进行转换。例如:
```
import librosa
import matplotlib.pyplot as plt
import librosa.display
import numpy as np
filepath = 'D:\\360se6\\bishe\\古筝\\'
filename = filepath + 'gz1.wav'
# 加载音频文件并转换为 numpy 数组
y, sr = librosa.load(filename)
tempo, beats = librosa.beat.beat_track(y=y, sr=sr)
plt.figure()
# 计算音频文件的梅尔频谱
S = librosa.feature.melspectrogram(y=y, sr=sr)
# 将 S 矩阵转换成二维数组
S = librosa.power_to_db(S, ref=np.max)
S = np.reshape(S, (S.shape[0], -1))
# 绘制音频波形和频谱图
ax = plt.subplot(2, 1, 2)
librosa.display.waveshow(S, axis='time', y_axis='mel')
plt.subplot(2, 1, 1, sharex=ax)
librosa.display.waveshow(y_beat_times, sr=sr, label='Beat clicks')
plt.legend()
plt.xlim(15, 30)
plt.tight_layout()
```
这样就可以避免这个错误了。
阅读全文