Librosa 和 matplotlib(使用 PyQt5)出现错误

Librosa and matplotlib (with PyQt5) getting error

我正在尝试制作歌曲的波形。并在 PyQt 包装的 matplotlib window 中显示它,但我一直遇到错误:

 RuntimeError: Can not put single artist in more than one figure

这发生在我尝试做的时候:

self.axes.add_collection(col)

与我导入 pyplot 时不同,它不会在调用 waveform 时自行添加到绘图中。所以这就是问题所在,使用 add_collection,我可以 google 的唯一方法,对我来说效果不佳。

附加信息,colPolyCollection

这是代码完整代码:

import sys
from PyQt5.QtWidgets import *
import librosa.display
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import os
import random


class WaveForm(FigureCanvas):
    def __init__(self, parent=None):

        dir_path = 'D:\Musikk\DLs\'
        dir_content = os.listdir(dir_path)
        file = os.path.join(dir_path, random.choice(dir_content))
        # Replace file with any song you may have.
        y, sr = librosa.load(file, mono=False, duration=None)
        fig = Figure(figsize=(5, 2))

        super().__init__(fig)

        col = librosa.display.waveplot(y, sr=sr)

        self.axes = fig.gca()
        self.axes.add_collection(col)

        self.draw()
        self.show()



if __name__ == '__main__':

    app = QApplication(sys.argv)
    form = WaveForm()
    app.exec()

此问题已通过设置 waveplot 采用名为 ax 的关键字参数来解决,您可以在其中为其指定坐标轴。您不需要存储 col 变量,也不需要在其上存储 add_collection。

librosa.display.waveplot(y, sr=sr, ax=self.axes)