Änderungssignale
Richtungsänderung von meteorologischen Extremen
Modellensemble¶
RCP2.6 - RCP8.5 | CLM | RCA | REM | HIR | WRF |
---|---|---|---|---|---|
MPI | x | x | x | x | |
Had | x | x | x | x | |
ECE | x | x | x | x | |
CNR | x | x | x | ||
Can | x | x | |||
Nor | x | ||||
MIR | x | ||||
IPS | x |
RCP8.5 & RCP2.6 (x) nur RCP8.5 (x)
Indikatoren¶
Extrem | Indikator | Messgröße | Schwellwert/Perzentil |
---|---|---|---|
Hitze | Hitzeintensität | tmax | 99 % |
Trockenheit | Trockentage | nied | 2 mm/d |
Frost | Kälteintensität | tmax | 1 % |
Schnee | Eisregen | nied | 0 Grad |
Starkregen | Regenintensität | nied | 99 % |
Sturm | Sturmtage | wmax | 17 m/s |
Ergebnis¶
nahe Zukunft | ferne Zukunft |
---|---|
Abbildung: Qualitative Klimaänderungssignale für den Beobachtungszeit 1990-2019 vs 1961-1990 und einem zukünftigen Zeithorizont für RCP8.5 2061-2090 vs 1971-2000 in Abhängigkeit von Erwärmungslevel.
Code¶
Module
# coding: utf-8
# -*- coding: iso-8859-1 -*-
import sys
import os
import matplotlib
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from mpl_toolkits.basemap import shiftgrid
import shapefile
import numpy as N
import math
from scipy import signal,stats
from matplotlib.collections import PatchCollection
import pandas as pd
from matplotlib import patches
from matplotlib.offsetbox import AnchoredText
from matplotlib import rc
rc('text', usetex=True)
rc('text.latex', preamble='\usepackage{color}')
import pydotplus # To create our Decision Tree Graph
from IPython.display import Image # To Display a image of our graph
Setting
plt.style.use('bmh')
params = {'legend.fontsize': 8,'font.family': 'serif'}
plt.rcParams.update(params)
Reading
fig = plt.figure(figsize=(12,8))
ax = plt.subplot(111)
e2 = patches.Ellipse((1,0),1,2,angle=0.0,linewidth=2,alpha=0.6,facecolor='gray',edgecolor='k',zorder=1)
ax.add_patch(e2)
plt.plot([-6,6],[0,0],'k')
plt.plot([0,0],[-5,5],'k')
mods = ['obs-dwd','mpi-clm','cnr-clm','can-clm','had-clm','ece-clm','cnr-rca','ips-rca','mpi-rca','had-rca','ece-rca','mpi-rem','can-rem','cnr-rem','mir-rem','had-rem','ece-rem','ece-hir','nor-hir','mpi-wrf','had-wrf']
decs = [2031,2061]
for mod in mods:
for dec in decs:
m = Basemap(projection='merc',llcrnrlat=47,urcrnrlat=55.2,llcrnrlon=5,urcrnrlon=16,resolution='l')
m.readshapefile('../shp/OSS_M1_PROD_DURCH_FL_EXT_geo', 'pds',zorder=10)
tmit50 = []
tmax99 = []
tmax01 = []
nied99 = []
eisr00 = []
wmit17 = []
nied02 = []
for info, shape in zip(m.pds_info, m.pds):
p = info['NAME']
file = '../csv/'+mod+'/'+p+'_jw.csv'
data=N.genfromtxt(file,names=True,comments='#',delimiter=';',dtype=None,encoding='utf-8')
if(mod=='obs-dwd'):
id = N.where((data['Jahr']>=1961)&(data['Jahr']<=1990))[0]
else:
id = N.where((data['Jahr']>=1971)&(data['Jahr']<=2000))[0]
tmit50a = N.mean(data['tmit50'][id])
tmax99a = N.mean(data['tmax99'][id])
tmax01a = N.mean(data['tmax01'][id])
nied99a = N.mean(data['nied99'][id])
eisr00a = N.mean(data['eisr00'][id])
wmit17a = N.mean(data['wmit17'][id])
nied02a = N.mean(data['nied02'][id])
if(mod=='obs-dwd'):
id = N.where((data['Jahr']>=1990)&(data['Jahr']<=2019))[0]
else:
id = N.where((data['Jahr']>=dec)&(data['Jahr']<=(dec+29)))[0]
tmit50b = N.mean(data['tmit50'][id])
tmax99b = N.mean(data['tmax99'][id])
tmax01b = N.mean(data['tmax01'][id])
nied99b = N.mean(data['nied99'][id])
eisr00b = N.mean(data['eisr00'][id])
wmit17b = N.mean(data['wmit17'][id])
nied02b = N.mean(data['nied02'][id])
tmit50.append(tmit50b-tmit50a)
tmax99.append((tmax99b-tmax99a)/4.)
tmax01.append((tmax01a-tmax01b)/3.)
nied99.append((nied99b-nied99a)/3.)
eisr00.append((eisr00b-eisr00a)/20.)
wmit17.append((wmit17b-wmit17a)/10.)
nied02.append((nied02b-nied02a)/10.)
tmit50 = N.mean(N.array(tmit50))
tmax99 = N.mean(N.array(tmax99))
tmax01 = N.mean(N.array(tmax01))
nied99 = N.mean(N.array(nied99))
eisr00 = N.mean(N.array(eisr00))
wmit17 = N.mean(N.array(wmit17))
nied02 = N.mean(N.array(nied02))
if(dec==2031):
plt.text(tmit50,tmax99,'Hitze',size=6,ha='center',va='center',bbox=dict(boxstyle="circle",ec='k',fc='orangered',alpha=0.4,lw=1),zorder=2)
plt.text(tmit50,tmax01,'Frost',size=6,ha='center',va='center',bbox=dict(boxstyle="circle",ec='k',fc='m',alpha=0.4,lw=1),zorder=12)
plt.text(tmit50,nied99,'Starkregen',size=6,ha='center',va='center',bbox=dict(boxstyle="round",ec='k',fc='dodgerblue',alpha=0.4,lw=1),zorder=10)
plt.text(tmit50,eisr00,'Schnee',size=6,ha='center',va='center',bbox=dict(boxstyle="round",ec='k',fc='w',alpha=0.4,lw=1),zorder=8)
plt.text(tmit50,wmit17,'Sturm',size=6,ha='center',va='center',bbox=dict(boxstyle="circle",ec='k',fc='g',alpha=0.4,lw=1),zorder=4)
plt.text(tmit50,nied02,'Trockenheit',size=6,ha='center',va='center',bbox=dict(boxstyle="round",ec='k',fc='y',alpha=0.4,lw=1),zorder=6)
else:
plt.text(tmit50,tmax99,'Hitze',size=12,weight='bold',ha='center',va='center',bbox=dict(boxstyle="circle",ec='k',fc='orangered',alpha=0.8,lw=2),zorder=22)
plt.text(tmit50,tmax01,'Frost',size=8,weight='bold',ha='center',va='center',bbox=dict(boxstyle="circle",ec='k',fc='m',alpha=0.8,lw=2),zorder=32)
plt.text(tmit50,nied99,'Starkregen',size=6,weight='bold',ha='center',va='center',bbox=dict(boxstyle="round",ec='k',fc='dodgerblue',alpha=0.8,lw=2),zorder=30)
plt.text(tmit50,eisr00,'Schnee',size=8,weight='bold',ha='center',va='center',bbox=dict(boxstyle="round",ec='k',fc='w',alpha=0.8,lw=2),zorder=28)
plt.text(tmit50,wmit17,'Sturm',size=8,weight='bold',ha='center',va='center',bbox=dict(boxstyle="circle",ec='k',fc='g',alpha=0.8,lw=2),zorder=24)
plt.text(tmit50,nied02,'Trockenheit',size=8,ha='center',va='center',bbox=dict(boxstyle="round",ec='k',fc='y',alpha=0.8,lw=2),zorder=26)
#plt.text(tmit50,nied02,'Trockenheit',size=8,weight='bold',ha='center',va='center',bbox=dict(boxstyle="round",ec='k',fc='y',alpha=0.8,lw=2),zorder=26)
plt.xlabel(r'\textbf{Erw\"armungslevel in Grad}',fontsize=20,weight='bold')
plt.ylabel(r'\textbf{\"Anderung durch Klimawandel}',fontsize=20,weight='bold')
plt.title(r'\textbf{Deutschland RCP8.5: 2031-2060 bis 2061-2090 vs 1971-2000}',fontsize=20)
plt.xticks([0,1,2,3,4,5],['0','+1','+2','+3','+4','+5'],fontsize=16,)
plt.yticks([-1,1],['Abnahme','Zunahme'],fontsize=16,rotation=90,va='center')
plt.xlim(-0.1,5.1)
plt.ylim(-2,2)
at = AnchoredText(r"\textbf{Modellensemble}",prop=dict(size=16),frameon=True,loc='upper left',)
at.patch.set_boxstyle("round,pad=0.,rounding_size=0.2")
ax.add_artist(at)
ax.tick_params(direction='out')
plt.tight_layout()
plt.savefig('./img/matrix0.png',dpi=240,bbox_inches='tight',pad_inches=0.0)#,transparent='true')