Test/myplot_inputs.py

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