TypeError: float() argument must be a string or a number, not 'PolyCollection'

TypeError: float() argument must be a string or a number, not 'PolyCollection'

我正在尝试使用 librosa.display.waveplot(y,sr)

绘制音频文件

我的代码:

import librosa.display
ax1 = plt.subplot(gs[1])
y, sr = librosa.load("Audiofilepath")
ax1.plot(librosa.display.waveplot(y, sr))

我绘制了结果。即使我收到以下错误消息

TypeError: float() argument must be a string or a number, not 'PolyCollection'

我在 Whosebug 中查看了上面的错误消息,Results available for numbers, period, nanType。但不适用于 PolyCollection.

如有高手librosa作图,请指导,避免出现此错误

我认为您遵循的文档有误。 librosa.display.waveplot() 的文档可以在 https://librosa.org/doc/latest/generated/librosa.display.waveplot.html.

找到

librosa.display.waveplot() 本身不绘制任何东西,你必须调用 plt.show() 来可视化它。

import librosa
import librosa.display
import matplotlib.pyplot as plt

plt.figure()

y, sr = librosa.load("1.mp3")
librosa.display.waveplot(y, sr)

plt.title('Example of librosa.display.waveplot')

plt.tight_layout()
plt.show()

librosa.display.waveplot()的return类型是matplotlib.collections.PolyCollectionmatplotlib.axes.Axes.plot 的参数类型可以是 array-like 或 scalar.

但是你把 PolyCollection 传给了 matplotlib.axes.Axes.plot。这就是 ax1.plot(librosa.display.waveplot(y, sr)).

提出 TypeError: float() argument must be a string or a number, not 'PolyCollection' 的原因