画滤波区域

filter_areas.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""
画出内置的滤波区域边界
"""
import matplotlib.pyplot as plt
import numpy as np
import moisten_ew as mew

# 默认滤波区域
default_areas = [
    mew.KelvinFilterArea(),
    mew.MRGFilterArea(), # 默认为西传 MRG 波区域
    mew.ERFilterArea(),
    mew.IGFilterArea(), # 默认为西传 IG 波区域
    mew.MJOFilterArea(),
    mew.TDFilterArea()
]

# 自定义滤波区域
custom_areas = [
    # 矩形区域
    mew.RectangleFilterArea(
        min_wavenumber=-10, max_wavenumber=10,
        min_frequency=0.1, max_frequency=0.3
    ),

    # 椭圆区域
    mew.EllipseFilterArea(
        center_wavenumber=-5, center_frequency=0.5,
        wavenumber_radius=5, freq_radius=0.2
    ),

    # 东传 MRG 波区域
    mew.MRGFilterArea(
        min_wavenumber=1, max_wavenumber=10,
        max_freq=1
    ),

    # n=2 的西传 IG 波区域
    mew.IGFilterArea(
        min_wavenumber=1, max_wavenumber=10,
        max_freq=1, n=2
    )
]


fig = plt.figure(figsize=(8, 5), constrained_layout=True)

for i, area in enumerate([default_areas, custom_areas]):
    ax = fig.add_subplot(1, 2, i+1)

    for area in area:
        # 区域为 shapely Polygon 对象,画出其外边界
        ax.plot(area.shape.exterior.xy[0], area.shape.exterior.xy[1],
                label=area.attributes.name)

    ax.set_xlabel('Zonal Wavenumber')
    ax.set_ylabel('Frequency (cpd)')
    ax.set_xlim(-20, 20)
    ax.set_ylim(0, 1.2)
    ax.axvline(0, color='k', lw=0.5, ls='--')
    ax.set_title(['Default', 'Custom'][i] + 'Filter Areas', loc='left')
    ax.legend()

fig.savefig("docs/images/filter_areas.png", dpi=300)