def myplot_create_pn(dict_in): # necessary modules import numpy as np import math # to use floor (nothing else) # Allocation list_allkeys = dict_in.keys() pname_str = [] # check if specific plotting directory given if 'dir_plot' in list_allkeys: pname_str = dict_in['dir_plot'] # check if beginning_string given if 'beg_str' in list_allkeys: pname_str = pname_str + dict_in['beg_str'] else: pname_str = pname_str + 'plot' # check if variable name given if 'varname' in list_allkeys: if dict_in['varname'][0] == '_': pname_str = pname_str + dict_in['varname'] else: pname_str = pname_str + '_' + dict_in['varname'] else: pname_str = pname_str + '_unknown_var' # check if specific height level given if 'zlev' in list_allkeys: if isinstance(dict_in['zlev'], basestring): if dict_in['zlev'][0] == '_': pname_str = pname_str + dict_in['zlev'] else: pname_str = pname_str + '_' + dict_in['zlev'] else: if dict_in['zlev'][0] == 0: fac = 1 else: fac = 10**(-min(math.floor(np.log10(abs(dict_in['zlev'][0]))),0)) if fac > 1: pname_str = pname_str + '_z' + str(int(fac*dict_in['zlev'][0])) + \ 'e-' + str(np.log10(fac)) + dict_in['zlev'][1] else: pname_str = pname_str + '_z' + str(int(dict_in['zlev'][0])) + dict_in['zlev'][1] # check if restriction to region is given if 'lonlat' in list_allkeys: dummy = dict_in['lonlat'] if dummy is str: if dummy[0] == '_': pname_str = pname_str + dummy else: pname_str = pname_str + '_' + dummy else: if dummy[0] < 0: pn1 = '{:03d}'.format(int(abs(round(dummy[0])))) + 'W' elif dummy[0] > 360: pn1 = '{:03d}'.format(int(round(dummy[0])-360)) + 'E' else: pn1 = '{:03d}'.format(int(round(dummy[0]))) + 'E' if dummy[1] < 0: pn2 = '{:03d}'.format(int(abs(round(dummy[1])))) + 'W' elif dummy[1] > 360: pn2 = '{:03d}'.format(int(round(dummy[1])-360)) + 'E' else: pn2 = '{:03d}'.format(int(round(dummy[1]))) + 'E' if dummy[2] < 0: pn3 = '{:02d}'.format(int(abs(round(dummy[2])))) + 'S' else: pn3 = '{:02d}'.format(int(round(dummy[2]))) + 'N' if dummy[3] < 0: pn4 = '{:02d}'.format(int(abs(round(dummy[3])))) + 'S' else: pn4 = '{:02d}'.format(int(round(dummy[3]))) + 'N' if 360-(dummy[1]-dummy[0])<1.5: pname_str = pname_str + '_reg' + pn3 + 'to' + pn4 else: pname_str = pname_str + '_reg' + pn1 + 'to' + pn2 + pn3 + 'to' + pn4 del dummy # check if date information given if 'date' in list_allkeys: if isinstance(dict_in['date'], basestring): if dict_in['date'][0] == '_': pname_str = pname_str + dict_in['date'] else: pname_str = pname_str + '_' + dict_in['date'] else: print '*** no date string yet included for numerical values in mycalc_create_pn ***' # check if end_str is given if 'end_str' in list_allkeys: pname_str = pname_str + dict_in['end_str'] else: pname_str = pname_str + '.png' return pname_str def myplot_create_cbar(cbar_min, cbar_max, num=[]): # import modules import numpy as np from math import floor # round values fac = floor(np.log10(abs(cbar_max-cbar_min))) #if abs(cbar_max) > abs(cbar_min): # fac = floor(np.log10(abs(cbar_max))) #else: # fac = floor(np.log10(abs(cbar_min))) fac = fac-1 cbar_max = round(cbar_max,-int(fac)) cbar_min = round(cbar_min,-int(fac)) # make array symmetric around zero? if cbar_min<0 and cbar_max>0: if abs(cbar_max+cbar_min) < 0.1*cbar_max: cbar_min = -max(cbar_max,abs(cbar_min)) cbar_max = max(cbar_max,abs(cbar_min)) # create cbar if num: cbar_range = np.linspace(cbar_min, cbar_max, num=num) else: cbar_range = np.linspace(cbar_min, cbar_max) # output return cbar_range