From 974102ca9f19398f128e1edb3e57d65afe16c60e Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Mon, 15 Apr 2024 18:19:31 +0200 Subject: meteogram: add surface wind --- plotter/meteogram.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'plotter/meteogram.py') diff --git a/plotter/meteogram.py b/plotter/meteogram.py index 7fca360..f05502f 100755 --- a/plotter/meteogram.py +++ b/plotter/meteogram.py @@ -6,14 +6,11 @@ import numpy as np import matplotlib.pyplot as plt -import xarray as xr -from metpy.interpolate import cross_section import metpy.calc as mpcalc -from metpy.units import units import misc -HEIGHT = 11 +HEIGHT = 13 def run(data, plots, output='.'): misc.create_output_dir(output) @@ -40,8 +37,12 @@ def _add_cloudcov(ax, data): cf = ax.contour(data.valid_time, data.isobaricInhPa, data.t.metpy.convert_units('degC').transpose()) ax.clabel(cf, inline=True, fontsize=10) - # TODO convert to knots? - barbs = ax.barbs(data.valid_time, data.isobaricInhPa, data.u.transpose(), data.v.transpose()) + ax.barbs( + data.valid_time, + data.isobaricInhPa, + data.u.metpy.convert_units('kt').transpose(), + data.v.metpy.convert_units('kt').transpose() + ) ax.invert_yaxis() @@ -78,11 +79,26 @@ def _add_precip(ax, data): ax_p.set_ylim(bottom=0) ax_p.plot(data.valid_time, data.sde.transpose(), color='blue') +def _add_surface_wind(ax, data): + ax.plot(data.valid_time, mpcalc.wind_speed(data.u10.transpose(), data.v10.transpose()), color='black', label='Wind (10m)') + ax.plot(data.valid_time, data.fg10.transpose(), color='red', label='Gust (10m)') + + ax_b = ax.twinx() + ax_b.barbs( + data.valid_time, + [1 for _ in data.valid_time], + data.u10.metpy.convert_units('kt').transpose(), + data.v10.metpy.convert_units('kt').transpose() + ) + ax_b.axis('off') + + ax.set_ylabel('Wind Speed [m/s]') + ax.legend(loc='lower right') def _plot(data, output, name, lat, lon): data = data.sel(latitude=lat, longitude = lon, method='nearest') - fig = plt.figure(figsize=(12, 10), layout="constrained") + fig = plt.figure(figsize=(12, 12), layout="constrained") sp_cnt, spec = _get_next_subplot(4) ax = fig.add_subplot(HEIGHT,1,spec) @@ -104,6 +120,10 @@ def _plot(data, output, name, lat, lon): ax5 = fig.add_subplot(HEIGHT,1,spec4,sharex=ax) _add_precip(ax5, data) + sp_cnt, spec5 = _get_next_subplot(2,sp_cnt) + ax6 = fig.add_subplot(HEIGHT,1,spec5,sharex=ax) + _add_surface_wind(ax6, data) + ### Info Lines sp_cnt, spec5 = _get_next_subplot(1,sp_cnt) ax_text = fig.add_subplot(HEIGHT, 1, spec5) -- cgit v1.2.3