PySDM_examples.deJong_Mackay_et_al_2023.plot_rates
1import numpy as np 2from matplotlib import colors, pyplot 3 4from PySDM.physics.constants import convert_to, si 5 6 7def log_kwargs(clog, cmin, cmax): 8 if clog: 9 return {"norm": colors.LogNorm(vmin=cmin, vmax=cmax)} 10 return {"vmin": cmin, "vmax": cmax} 11 12 13def plot_ax( 14 ax, 15 var, 16 qlabel, 17 output, 18 *, 19 contour_var1=None, 20 contour_lvl1=None, 21 contour_var2=None, 22 contour_lvl2=None, 23 cmin=None, 24 cmax=None, 25 clog=False, 26): 27 tgrid = output["t"].copy() 28 zgrid = output["z"].copy() 29 convert_to(zgrid, si.km) 30 31 if clog: 32 data = output[var].copy() 33 data[data == 0] = np.nan 34 else: 35 data = output[var] 36 37 mesh = ax.pcolormesh( 38 tgrid, 39 zgrid, 40 data, 41 cmap="BuPu", 42 shading="nearest", 43 **log_kwargs(clog, cmin, cmax), 44 ) 45 46 if contour_var1 is not None and contour_lvl1 is not None: 47 ax.contour( 48 tgrid, 49 zgrid, 50 output[contour_var1], 51 contour_lvl1, 52 colors="k", 53 linestyles="--", 54 ) 55 if contour_var2 is not None and contour_lvl2 is not None: 56 ax.contour( 57 tgrid, 58 zgrid, 59 output[contour_var2], 60 contour_lvl2, 61 colors="r", 62 linestyles="--", 63 ) 64 65 ax.set_xlabel("time [s]") 66 ax.set_ylabel("z [km]") 67 ax.set_ylim(0, None) 68 69 if clog: 70 cbar_levels = np.logspace(np.log10(cmin), np.log10(cmax), 5, endpoint="True") 71 else: 72 cbar_levels = np.linspace(cmin, cmax, 5, endpoint="True") 73 cbar = pyplot.colorbar(mesh, fraction=0.05, location="top", extend="max", ax=ax) 74 cbar.set_ticks(cbar_levels) 75 cbar.set_label(qlabel) 76 77 78def plot_zeros_ax(ax, var, qlabel, output, cmin=None, cmax=None, clog=False): 79 dt = output["t"][1] - output["t"][0] 80 dz = output["z"][1] - output["z"][0] 81 tgrid = np.concatenate(((output["t"][0] - dt / 2,), output["t"] + dt / 2)) 82 zgrid = np.concatenate(((output["z"][0] - dz / 2,), output["z"] + dz / 2)) 83 convert_to(zgrid, si.km) 84 85 zeros = np.zeros_like(output[var]) 86 kwargs = log_kwargs(clog, cmin, cmax) 87 cmap = "BuPu" 88 mesh = ax.pcolormesh(tgrid, zgrid, zeros, cmap=cmap, **kwargs) 89 90 ax.set_xlabel("time [s]") 91 ax.set_ylabel("z [km]") 92 ax.set_ylim(0, None) 93 94 cbar = pyplot.colorbar(mesh, fraction=0.05, location="top", ax=ax) 95 cbar.set_label(qlabel)
def
log_kwargs(clog, cmin, cmax):
def
plot_ax( ax, var, qlabel, output, *, contour_var1=None, contour_lvl1=None, contour_var2=None, contour_lvl2=None, cmin=None, cmax=None, clog=False):
14def plot_ax( 15 ax, 16 var, 17 qlabel, 18 output, 19 *, 20 contour_var1=None, 21 contour_lvl1=None, 22 contour_var2=None, 23 contour_lvl2=None, 24 cmin=None, 25 cmax=None, 26 clog=False, 27): 28 tgrid = output["t"].copy() 29 zgrid = output["z"].copy() 30 convert_to(zgrid, si.km) 31 32 if clog: 33 data = output[var].copy() 34 data[data == 0] = np.nan 35 else: 36 data = output[var] 37 38 mesh = ax.pcolormesh( 39 tgrid, 40 zgrid, 41 data, 42 cmap="BuPu", 43 shading="nearest", 44 **log_kwargs(clog, cmin, cmax), 45 ) 46 47 if contour_var1 is not None and contour_lvl1 is not None: 48 ax.contour( 49 tgrid, 50 zgrid, 51 output[contour_var1], 52 contour_lvl1, 53 colors="k", 54 linestyles="--", 55 ) 56 if contour_var2 is not None and contour_lvl2 is not None: 57 ax.contour( 58 tgrid, 59 zgrid, 60 output[contour_var2], 61 contour_lvl2, 62 colors="r", 63 linestyles="--", 64 ) 65 66 ax.set_xlabel("time [s]") 67 ax.set_ylabel("z [km]") 68 ax.set_ylim(0, None) 69 70 if clog: 71 cbar_levels = np.logspace(np.log10(cmin), np.log10(cmax), 5, endpoint="True") 72 else: 73 cbar_levels = np.linspace(cmin, cmax, 5, endpoint="True") 74 cbar = pyplot.colorbar(mesh, fraction=0.05, location="top", extend="max", ax=ax) 75 cbar.set_ticks(cbar_levels) 76 cbar.set_label(qlabel)
def
plot_zeros_ax(ax, var, qlabel, output, cmin=None, cmax=None, clog=False):
79def plot_zeros_ax(ax, var, qlabel, output, cmin=None, cmax=None, clog=False): 80 dt = output["t"][1] - output["t"][0] 81 dz = output["z"][1] - output["z"][0] 82 tgrid = np.concatenate(((output["t"][0] - dt / 2,), output["t"] + dt / 2)) 83 zgrid = np.concatenate(((output["z"][0] - dz / 2,), output["z"] + dz / 2)) 84 convert_to(zgrid, si.km) 85 86 zeros = np.zeros_like(output[var]) 87 kwargs = log_kwargs(clog, cmin, cmax) 88 cmap = "BuPu" 89 mesh = ax.pcolormesh(tgrid, zgrid, zeros, cmap=cmap, **kwargs) 90 91 ax.set_xlabel("time [s]") 92 ax.set_ylabel("z [km]") 93 ax.set_ylim(0, None) 94 95 cbar = pyplot.colorbar(mesh, fraction=0.05, location="top", ax=ax) 96 cbar.set_label(qlabel)