Zum Inhalt

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