"""
画出内置的滤波区域边界
"""
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)