pywt
1#!/usr/bin/env python
2
3import matplotlib.pyplot as plt
4import numpy as np
5
6import pywt
7
8time, sst = pywt.data.nino()
9dt = time[1] - time[0]
10
11# Taken from http://nicolasfauchereau.github.io/climatecode/posts/wavelet-analysis-in-python/
12wavelet = 'cmor1.5-1.0'
13scales = np.arange(1, 128)
14
15[cfs, frequencies] = pywt.cwt(sst, scales, wavelet, dt)
16power = (abs(cfs)) ** 2
17
18period = 1. / frequencies
19levels = [0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8]
20f, ax = plt.subplots(figsize=(15, 10))
21ax.contourf(time, np.log2(period), np.log2(power), np.log2(levels),
22extend='both')
23
24ax.set_title(f'Nino1+2 Wavelet Power Spectrum ({wavelet})')
25ax.set_ylabel('Period (years)')
26Yticks = 2 ** np.arange(np.ceil(np.log2(period.min())),
27np.ceil(np.log2(period.max())))
28ax.set_yticks(np.log2(Yticks))
29ax.set_yticklabels(Yticks)
30ax.invert_yaxis()
31ylim = ax.get_ylim()
32ax.set_ylim(ylim[0], -1)
33
34plt.show()
35