import datetime as dt
import urllib
import warnings

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import wradlib as wrl
import wradlib_data
import xarray as xr
import xradar as xd
from IPython.display import display

warnings.filterwarnings("ignore")
/home/docs/checkouts/readthedocs.org/user_builds/wradlib/conda/latest/lib/python3.13/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm

2D Membershipfunctions#

Precipitation Types#

pr_types = wrl.classify.pr_types
for k, v in pr_types.items():
    print(str(k) + " - ".join(v))
0LR - Light Rain
1MR - Moderate Rain
2HR - Heavy Rain
3LD - Large Drops
4HL - Hail
5RH - Rain/Hail
6GH - Graupel/Hail
7DS - Dry Snow
8WS - Wet Snow
9HC - H Crystals
10VC - V Crystals
11NP - No Precip

Load 2D Membership Functions#

filename = wradlib_data.DATASETS.fetch("misc/msf_xband_v1.nc")
msf = xr.open_dataset(filename)
display(msf)
<xarray.Dataset> Size: 97kB
Dimensions:  (hmc: 11, idp: 55, trapezoid: 4)
Coordinates:
  * hmc      (hmc) <U2 88B 'LR' 'MR' 'HR' 'LD' 'HL' ... 'GH' 'DS' 'WS' 'HC' 'VC'
  * idp      (idp) float64 440B -10.0 -8.0 -6.0 -4.0 ... 92.0 94.0 96.0 98.0
Dimensions without coordinates: trapezoid
Data variables:
    ZH       (hmc, idp, trapezoid) float64 19kB ...
    ZDR      (hmc, idp, trapezoid) float64 19kB ...
    RHO      (hmc, idp, trapezoid) float64 19kB ...
    KDP      (hmc, idp, trapezoid) float64 19kB ...
    TEMP     (hmc, idp, trapezoid) float64 19kB ...
Attributes:
    version:      1
    title:        2D Membershipfunctions Hydrometeorclassification for XBand
    institution:  Institute of Geosciences, Meteorology Section, University o...
    history:      created by Raquel Evaristo, adapted to netCDF by Kai Mühlbauer
    comment:      created with wradlib

Plot 2D Membership Functions#

minmax = [(-10, 100), (-1, 6), (0.0, 1.0), (-5, 35), (-65, 45)]

for i, pr in enumerate(pr_types.values()):
    if pr[0] == "NP":
        continue
    fig = plt.figure(figsize=(10, 8))
    t = fig.suptitle(" - ".join(pr))
    t.set_y(1.02)
    hmc = msf.sel(hmc=pr[0])
    for k, p in enumerate(hmc.data_vars.values()):
        p = p.where(p != 0)
        ax = fig.add_subplot(3, 2, k + 1)
        p.sel(trapezoid=0).plot(x="idp", c="k", lw=1.0, ax=ax)
        p.sel(trapezoid=1).plot(x="idp", c="k", lw=2.0, ax=ax)
        p.sel(trapezoid=2).plot(x="idp", c="k", lw=2.0, ax=ax)
        p.sel(trapezoid=3).plot(x="idp", c="k", lw=1.0, ax=ax)
        ax.set_xlim((hmc.idp.min(), hmc.idp.max()))
        ax.margins(x=0.05, y=0.05)
        t = ax.set_title(f"{p.long_name}")
        ax.set_ylim(minmax[k])
    fig.tight_layout()
plt.show()
../../../_images/fdb6010bcd1b30236cad9c1ed850f7a15307fa87dba656da305934dc0174d96f.png ../../../_images/504b12c8bb34d2e1a97389e95a578cc55a7bc08c73299e8120d521f39dcfd01b.png ../../../_images/df656620765b7e8630a6fd11fdf5e42e9e18289d97636b6cfffdc3daef38b4f8.png ../../../_images/d8234e840b07ff9728f68240ebc9d07ab1198fd4494723d0ec08cba77ad57382.png ../../../_images/c202ac1171cb86b611061a2d020ffe39613bc9b08d608bba6c08b6d128f8029d.png ../../../_images/74748dd4e30efc23a38bd4ac8436c288e1cde8e6243bfd14fd5c3a968f66de61.png ../../../_images/e9da8b75ebf788210c15cd8046d41ab79357f6bf17fa26f5edc954367fd0e1ca.png ../../../_images/925fe58e84d3fe8e90efc4bc41b98870a565a8e7b3ecce57a6b608bc8506b6c4.png ../../../_images/e41d033322470f9cbc573336437963692a3026e79c542983b0035207280738d5.png ../../../_images/ba65903df2003f66f4da8aee48bc1e688939ace1261dff0f3076f5db26bbad87.png ../../../_images/1d806cbbe834d454cfa89417e837e6be03d43dc3819b682b83a0c3c2f2cbf2c5.png