Основная схема вывода вейвлет-анализа в matplotlib

Я обнаружил всплески на практике благодаря пистолетному модулю python .

Я просмотрел некоторые примеры использования модуля pywt , но я не мог понять важный шаг: я не знаю, как в основном отображать многомерный вывод вейвлет-анализа с matplotlib .

Это то, что я пробовал, (учитывая один топот ax ):

 import pywt data_1_dimension_series = [0,0.1,0.2,0.4,-0.1,-0.1,-0.3,-0.4,1.0,1.0,1.0,0] # indeed my data_1_dimension_series is much longer cA, cD = pywt.dwt(data_1_dimension_series, 'haar') ax.set_xlabel('seconds') ax.set_ylabel('wavelet affinity by scale factor') ax.plot(axe_wt_time, zip(cA,cD)) 

или также

 data_wt_analysis = pywt.dwt(data_1_dimension_series, 'haar') ax.plot(axe_wt_time, data_wt_analysis) 

Оба ax.plot(axe_wt_time, data_wt_analysis) и ax.plot(axe_wt_time, zip(cA,cD)) не подходят и возвращают ошибку. Оба броска x and y must have the same first dimension

Дело в том, что data_wt_analysis содержит несколько 1D-рядов, по одному для каждого масштабного коэффициента вейвлетов. Я, конечно, мог отображать столько графиков, сколько есть масштабных коэффициентов. Но я хочу, чтобы все они были на одном графике.

Как я мог просто отображать такие данные только на одном графике с помощью matplotlib ?

Что-то вроде красочной площади ниже:

введите описание изображения здесь

    Вы должны извлечь разные серии 1D из интересующего вас массива и использовать matplotlib, как в самом простом примере

     import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() 

    от док.

    Вы хотите наложить 1D-графики (или линейные графики). Итак, если у вас есть списки l1, l2, l3, вы будете делать

     import matplotlib.pyplot as plt plt.plot(l1) plt.plot(l2) plt.plot(l3) plt.show() 

    Для scalogram: то, что я использовал, было imshow() . Это было не для всплесков, а для того же ID: colormap.

    Я нашел этот образец для использования imshow() с imshow() , не пытался подумать

     from pylab import * import pywt import scipy.io.wavfile as wavfile # Find the highest power of two less than or equal to the input. def lepow2(x): return 2 ** floor(log2(x)) # Make a scalogram given an MRA tree. def scalogram(data): bottom = 0 vmin = min(map(lambda x: min(abs(x)), data)) vmax = max(map(lambda x: max(abs(x)), data)) gca().set_autoscale_on(False) for row in range(0, len(data)): scale = 2.0 ** (row - len(data)) imshow( array([abs(data[row])]), interpolation = 'nearest', vmin = vmin, vmax = vmax, extent = [0, 1, bottom, bottom + scale]) bottom += scale # Load the signal, take the first channel, limit length to a power of 2 for simplicity. rate, signal = wavfile.read('kitten.wav') signal = signal[0:lepow2(len(signal)),0] tree = pywt.wavedec(signal, 'db5') # Plotting. gray() scalogram(tree) show()