118 lines
4.4 KiB
Python
118 lines
4.4 KiB
Python
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
|
|
|