diff --git a/requirements.txt b/requirements.txt index ce0e52bb72da929f8c97c01ef18ceef6cba86bcc..496c6426b7d935f36500db48ea71d741b5e1e0e9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,8 @@ pytest-cov pytest-html pydot mock -statsmodels \ No newline at end of file +statsmodels +seaborn +dask==0.20.2 +toolz # for dask +cloudpickle # for dask \ No newline at end of file diff --git a/src/plotting/postprocessing_plotting.py b/src/plotting/postprocessing_plotting.py new file mode 100644 index 0000000000000000000000000000000000000000..4b1960536f84474218a5661670fd2e750aeb7c20 --- /dev/null +++ b/src/plotting/postprocessing_plotting.py @@ -0,0 +1,55 @@ +__author__ = "Lukas Leufen, Felix Kleinert" +__date__ = '2019-12-17' + +import os +import logging + +import xarray as xr +import matplotlib +import seaborn as sns +import matplotlib.pyplot as plt + +import dask.array as da +import dask +import dask.dataframe as ddf +logging.getLogger('matplotlib').setLevel(logging.WARNING) + + +def plot_monthly_summary(stations, data_path, name: str, window_lead_time, target_var, plot_folder="."): + + logging.debug("run plot_monthly_summary()") + forecasts = None + + for station in stations: + logging.debug(f"... preprocess station {station}") + file_name = os.path.join(data_path, name % station) + data = xr.open_dataarray(file_name) + + data_cnn = data.sel(type="CNN").squeeze() + data_cnn.coords["ahead"].values = [f"{days}d" for days in data_cnn.coords["ahead"].values] + + data_orig = data.sel(type="orig", ahead=1).squeeze() + data_orig.coords["ahead"] = "orig" + + data_concat = xr.concat([data_orig, data_cnn], dim="ahead") + data_concat = data_concat.drop("type") + + data_concat.index.values = data_concat.index.values.astype("datetime64[M]").astype(int) %12 +1 + data_concat = data_concat.clip(min=0) + + forecasts = xr.concat([forecasts, data_concat], 'index') if forecasts is not None else data_concat + + forecasts = forecasts.to_dataset(name='values').to_dask_dataframe() + logging.debug("... start plotting") + ax = sns.boxplot(x='index', y='values', hue='ahead', data=forecasts.compute(), whis=1., + palette=[matplotlib.colors.cnames["green"]]+sns.color_palette("Blues_d", window_lead_time).as_hex(), + flierprops={'marker':'.', 'markersize':1}, + showmeans=True, meanprops={'markersize':1, 'markeredgecolor':'k'}) + ax.set(xlabel='month', ylabel=f'{target_var}') + plt.tight_layout() + plot_path = os.path.join(os.path.abspath(plot_folder), 'test_monthly_box.pdf') + logging.debug(f"... save plot to {plot_path}") + plt.savefig(plot_path) + plt.close('all') + +