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')
+
+