Сюжеты librosa в сетке matplotlib
Я пытаюсь использовать librosa с matplotlib, и использую gridspec и все примеры кода librosa выглядят так, как будто они предназначены для использования с ноутбуками jupyter, и я пишу на pyqt. Ниже приведено что-то вроде моего кода:
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.gridspec as gridspec
import librosa
self.fig = Figure(figsize=(self.width, self.height), dpi=dpi)
gs = gridspec.GridSpec(2, 2, height_ratios=[3, 1])
self.axes1 = self.fig.add_subplot(gs[1, :])
self.axes2 = self.fig.add_subplot(gs[0, :])
self.axes1.plot(range(array_length), self.array)
self.axes2.specgram(self.array, Fs=44100, scale='dB')
Весь пример кода выглядит так:
C = librosa.feature.chroma_cqt(y=y, sr=sr)
plt.subplot(4, 2, 5)
librosa.display.specshow(C, y_axis='chroma')
plt.colorbar()
plt.title('Chromagram')
Я пытаюсь получить спектрограмму в gridspec[0,:]. Я предполагаю, что вопрос заключается в том, как заставить принести librosa в self.axes2?
1 ответ
Если self.axes2
это оси, созданные с помощью gridspec, который вы могли бы предоставить для вызова specshow
,
C = librosa.feature.chroma_cqt(y=y, sr=sr)
librosa.display.specshow(C, y_axis='chroma', ax=self.axes2)
self.fig.colorbar(self.axes2.images[0], ax=self.axes2)
self.axes2.set_title('Chromagram')