如何在pyqt应用程序中使用librosa.display显示matplotlib.colorbar?

2024-03-28 18:57:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在pyqt程序中显示librosa.display绘图,但无法添加到此颜色栏。你知道吗

代码:

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

class Spectrogram(FigureCanvas):

    def __init__(self, stft, sr, parent, duration):
        fig = Figure()
        super().__init__(fig)

        self.setParent(parent)
        self.axes = fig.gca()
        Xdb = librosa.amplitude_to_db(abs(stft))
        librosa.display.specshow(Xdb, sr=sr, ax=self.axes, x_axis="time",
                                 y_axis="log", cmap=matplotlib.cm.jet)
        i = self.axes.imshow(Xdb)
        fig.colorbar(i)

        self.draw()

但这是行不通的。你知道吗

当我用平常的方式写的时候,一切都很好:

    def show_spectrum(self, figure_width = 14, figure_height = 5, dpi = 200):
        # Convert an amplitude spectrogram to dB-scaled spectrogram
        Xdb = librosa.amplitude_to_db(abs(self.X))
        print(Xdb.shape)
        plt.figure(figsize=(figure_width, figure_height), dpi=dpi)
        librosa.display.specshow(Xdb, sr=self._sample_rate, x_axis='time',
                                 y_axis='log', cmap=matplotlib.cm.jet)
        plt.grid(True)
        plt.colorbar()
        plt.show()

Tags: toselfmatplotlibdisplayfigpltfigurelibrosa