#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created 2021
@author: Scientists4Future Leipzig
"""

### Die Pakete einbinden
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

## Vorbereitung: Lege die Region fest:
region = 'Deutschland'
#region = 'Sachsen'

## Diese Regionen Stehen zur Verfügung:
# 1:'Sachsen',2:'Deutschland',3:'Brandenburg/Berlin', 4:'Brandenburg',
# 5:'Baden-Wuerttemberg', 6:'Bayern', 7:'Hessen', 8:'Mecklenburg-Vorpommern',
# 9:'Niedersachsen', 10:'Niedersachsen/Hamburg/Bremen',
# 11:'Nordrhein-Westfalen', 12:'Rheinland-Pfalz', 13:'Schleswig-Holstein',
# 14:'Saarland', 15:'Sachsen-Anhalt',
# 16:'Thueringen/Sachsen-Anhalt', 17:'Thueringen'}

### Ed Hawkins Farben einbauen
cmap = ListedColormap([
'#08306b', '#08519c', '#2171b5', '#4292c6',
'#6baed6', '#9ecae1', '#c6dbef', '#deebf7',
'#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a',
'#ef3b2c', '#cb181d', '#a50f15', '#67000d',
])

### Daten von Deutschen Wetterdienst DWD holen:
link = "https://opendata.dwd.de/climate_environment/CDC/regional_averages_DE/annual/air_temperature_mean/regional_averages_tm_year.txt"
data = pd.read_table(link,skiprows=1, sep=';')

### Definitionen für die Berechnungen:
# Referenzzeitraum für Mittelwertberechnung: 1971 - 2000 nach Definition von Ed Hawkins (https://showyourstripes.info/faq)
ref_min = 1971
ref_max = 2000
ref_data = data[(data['Jahr']>=ref_min) & (data['Jahr']<=ref_max)]

# Referenzzeitraum für die Standardabweichung für die entsprechende Farbskala
ref_min_std = 1901
ref_max_std = 2000
ref_data_std = data[(data['Jahr']>=ref_min_std) & (data['Jahr']<=ref_max_std)]
std = ref_data_std[region].std()
#Minimum und Maximumwerte für die Farbskala. +- 2.6 / +- 1.7
vmin = -2.6*std
vmax = 2.6*std

## Berechnungen
# Temperaturanomalie berechnen: Temperaturdaten der Region Minus den Mittelwert des Referenzzeitraums
temps = data[region] - ref_data[region].mean()
# Daten übereinander Stapeln, damit es später gezeichnet werden kann.
stacked_temps = np.stack((temps, temps))

### Erstellung der Abbildung
# Erzeugen der Abbildung selber mit Größe 16 Zoll Breite, 9 Zoll Höhe
fig = plt.figure(figsize=(16,9))
# Alles an Achsen und Beschriftungen ausschalten, damit nur die Streifen gezeigt werden.
plt.gca().set_axis_off()
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)
plt.margins(0,0)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())

# Streifen Zeichnen
img = plt.imshow(stacked_temps, cmap=cmap, aspect='auto', vmin=vmin, vmax=vmax, interpolation='none') #

# Textbeschriftung, Position in der Mitte
text = 'Temperaturanomalien in ' + region + '\nvon ' + str(data['Jahr'].min()) + ' bis ' + str(data['Jahr'].max())
plt.text((data['Jahr'].max()-data['Jahr'].min())/2, 1.4, text, fontsize=44, fontweight='bold', color='black', alpha=0.8,ha='center')

# Als Datei abspreichern
plt.savefig("warmingstripes_"+temps.name+'_'+str(data['Jahr'].min())+'-'+str(data['Jahr'].max())+".png", bbox_inches = 'tight', pad_inches = 0)#, dpi=300)