Changeset 1074 in lmdz_wrf for trunk


Ignore:
Timestamp:
Aug 31, 2016, 9:01:13 PM (9 years ago)
Author:
lfita
Message:

Adding `draw_2lines': Function to plot two lines in different axes (x/x2 or y/y2)

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/drawing.py

    r1071 r1074  
    3131## e.g. # drawing.py -o draw_river_desc -f diver_desc.nc -S 'Y|lat|lat|-1,X|lon|lon|-1:red,green:Blues:cyl,l:ORCDHIEE rivers:pdf:0:or_rivers -v Amazon
    3232## e.g. # drawing.py -o draw_vertical_levels -f wrfout_d01_2001-11-11_00:00:00 -S 'true:false:wrfout!vertical!levels!(standard!40):png:4' -v WRFz
    33 ## e.g. $ drawing.py -o draw_subbasin -f Caceres_subbasin.nc -S 'Caceres:None:cyl,l:2,True:Caceres:pdf:0:Caceres_subbasin'
     33## e.g. # drawing.py -o draw_subbasin -f Caceres_subbasin.nc -S 'Caceres:None:cyl,l:2,True:Caceres:pdf:0:Caceres_subbasin'
     34## e.g. # drawing.py -o draw_2lines -f /home/lluis/etudes/WRF_LMDZ/WaquaL_highres/tests/model_graphics/WRF/current/wss_wrfout_tvar_xmean.nc,/home/lluis/etudes/WRF_LMDZ/WaquaL_highres/tests/model_graphics/WRF/current/tas_wrfout_tvar_xmean.nc -v wssvarmean,tasvarmean -S 'lat:0.,20.:0.,4.:-90.,90.:y:wss,tas:red,blue:2.,2.:-:2.,2.:,:wss!tas!mean!meridional!tvar:lon:0:wss_tas_wrfout_tvar_xmean:pdf'
    3435
    3536main = 'drawing.py'
     
    4243  'draw_2D_shad_cont', 'draw_2D_shad_cont_time', 'draw_2D_shad_line',                \
    4344  'draw_2D_shad_line_time', 'draw_barbs', 'draw_basins',                             \
    44   'draw_lines', 'draw_lines_time', 'draw_Neighbourghood_evol',                       \
     45  'draw_2lines', 'draw_lines', 'draw_lines_time', 'draw_Neighbourghood_evol',        \
    4546  'draw_points', 'draw_points_lonlat',                                               \
    4647  'draw_ptZvals', 'draw_river_desc', 'draw_subbasin', 'draw_timeSeries',             \
     
    41164117    return
    41174118
    4118 def draw_2lines(values,ncfiles,varnames):
     4119def draw_2lines(ncfiles, values, varnames):
    41194120    """ Fucntion to plot two lines in different axes (x/x2 or y/y2)
    4120       values= [varnA]:[varnB]:[commonvardim]:[varangeA]:[varangeB]:[varangeaxis]:[axisvals]:[figvarns]:[colors]:
     4121      values= [commonvardim]:[varangeA]:[varangeB]:[varangeaxis]:[axisvals]:[figvarns]:[colors]:
    41214122       [widths]:[styles]:[sizemarks]:[marks]:[graphtitle]:[labelaxis]:[lloc]:[figname]:[figkind]
    4122         [varnA]: name of the variable A in fileA
    4123         [varnB]: name of the variable B in fileB
    41244123        [commonvardim]: name of the common variable-dimension
    41254124        [varangeA]: ',' separated list of range (min,max) for A values ('None', automatic; 'Extrs' from values extremes)
     
    41454144      varnames=  ',' separated list of variables names in the files to plot
    41464145    """
    4147     function = 'draw_2lines'
     4146    fname = 'draw_2lines'
    41484147
    41494148    if values == 'h':
     
    41524151        quit()
    41534152
    4154     expectargs = '[varnA]:[varnB]:[commonvardim]:[varangeA]:[varangeB]:' +           \
     4153    expectargs = '[commonvardim]:[varangeA]:[varangeB]:' +           \
    41554154     '[varangeaxis]:[axisvals]:[figvarns]:[colors]:[widths]:[styles]:[sizemarks]:' + \
    41564155     '[marks]:[graphtitle]:[labelaxis]:[lloc]:[figname]:[figkind]'
     
    41584157    drw.check_arguments(fname,values,expectargs,':')
    41594158
    4160     varns = [values.split(':')[0], values.split(':')[1]]
    4161     commonvardim = values.split(':')[2]
    4162     varangeA0 = values.split(':')[3]
    4163     varangeB0 = values.split(':')[4]
    4164     varangeaxis0 = values.split(':')[5]
    4165     axisvals = values.split(':')[6]
    4166     figvarns = values.split(':')[7].split(',')
    4167     colors = gen.str_list(values.split(':')[8],',')
    4168     widths = gen.str_list(values.split(':')[9],',')
    4169     styles = gen.str_list(values.split(':')[10],',')
    4170     sizemarks = gen.str_list(values.split(':')[11],',')
    4171     marks = gen.str_list(values.split(':')[12],',')
    4172     graphtitle = values.split(':')[13].replace('!',' ')
    4173     labelaxis = values.split(':')[14].replace('!',' ')
    4174     lloc = np.int(values.split(':')[15])
    4175     figname = values.split(':')[16]
    4176     figkind = values.split(':')[17]
     4159    commonvardim = values.split(':')[0]
     4160    varangeA0 = values.split(':')[1]
     4161    varangeB0 = values.split(':')[2]
     4162    varangeaxis0 = values.split(':')[3]
     4163    axisvals = values.split(':')[4]
     4164    figvarns = values.split(':')[5].split(',')
     4165    colors = gen.str_list(values.split(':')[6],',')
     4166    widths = gen.str_list_k(values.split(':')[7],',','np.float')
     4167    styles = gen.str_list(values.split(':')[8],',')
     4168    sizemarks = gen.str_list_k(values.split(':')[9],',','np.float')
     4169    marks = gen.str_list(values.split(':')[10],',')
     4170    graphtitle = values.split(':')[11].replace('!',' ')
     4171    labelaxis = values.split(':')[12].replace('!',' ')
     4172    lloc = np.int(values.split(':')[13])
     4173    figname = values.split(':')[14]
     4174    figkind = values.split(':')[15]
    41774175
    41784176    files = ncfiles.split(',')
     
    41864184        print '  ' + fname + ": file '" + files[0] + "' does not exist !!"
    41874185        quit(-1)
     4186
    41884187    oncA = NetCDFFile(files[0], 'r')
    41894188
    4190     if not gen.searchInfile(oncA.variables.kesy(), invarns[0]):
     4189    if not gen.searchInlist(oncA.variables.keys(), invarns[0]):
    41914190        print errormsg
    41924191        print '  ' + fname + ": A file '" + files[0] + "' does not have variable '" +\
    41934192          invarns[0] + "' !!"
    41944193        quit(-1)
     4194
    41954195    objvA = oncA.variables[invarns[0]]
    41964196    varvalsA = objvA[:]
    4197     varangeA = []
    4198 
    4199     if gen.searchInfile(objvA.ncattrs(), 'units'):
    4200         varunits.append(objva.getncattr('units'))
     4197    varangeA = np.zeros((2),dtype=np.float)
     4198
     4199    if gen.searchInlist(objvA.ncattrs(), 'units'):
     4200        varunits.append(drw.units_lunits(objvA.getncattr('units')))
    42014201    else:
    42024202        valsA = gen.variables_values(invarns[0])
    4203         varunits.append(valsA[5])
    4204         if varangeA0 == 'None':
    4205             varangeA = [valsA[2], valsA[3]]
    4206         elif varangeA0 == 'Extrs':
    4207             varangeA = [np.min(varvalsA), np.max(varvalsA)]
    4208         else:
    4209             for iv in range(2): varangeA[iv] = np.float(varangeA0[iv])
    4210 
    4211     if not gen.searchInfile(oncA.variables.kesy(), commvardim):
     4203        varunits.append(drw.units_lunits(valsA[5]))
     4204    if varangeA0 == 'None':
     4205        varangeA = [valsA[2], valsA[3]]
     4206    elif varangeA0 == 'Extrs':
     4207        varangeA = [np.min(varvalsA), np.max(varvalsA)]
     4208    else:
     4209        for iv in range(2): varangeA[iv] = np.float(varangeA0.split(',')[iv])
     4210
     4211    if not gen.searchInlist(oncA.variables.keys(), commonvardim):
    42124212        print errormsg
    42134213        print '  ' + fname + ": A file '" + files[0] + "' does not have common " +   \
     
    42244224        print '  ' + fname + ": file '" + files[1] + "' does not exist !!"
    42254225        quit(-1)
     4226
    42264227    oncB = NetCDFFile(files[1], 'r')
    42274228
    4228     if not gen.searchInfile(oncB.variables.keys(), invarns[1]):
     4229    if not gen.searchInlist(oncB.variables.keys(), invarns[1]):
    42294230        print errormsg
    42304231        print '  ' + fname + ": B file '" + files[1] + "' does not have variable '" +\
    42314232          invarns[1] + "' !!"
    42324233        quit(-1)
     4234
    42334235    objvB = oncB.variables[invarns[1]]
    42344236    varvalsB = objvB[:]
    4235     varangeB = []
    4236 
    4237     if gen.searchInfile(objvB.ncattrs(), 'units'):
    4238         varunits.append(objvB.getncattr('units'))
     4237    varangeB = np.zeros((2),dtype=np.float)
     4238
     4239    if gen.searchInlist(objvB.ncattrs(), 'units'):
     4240        varunits.append(drw.units_lunits(objvB.getncattr('units')))
    42394241    else:
    42404242        valsB = gen.variables_values(invarns[1])
    4241         varunits.append(valsB[5])
    4242         if varangeB0 == 'None':
    4243             varangeB = [valsB[2], valsB[3]]
    4244         elif varangeB0 == 'Extrs':
    4245             varangeA = [np.min(varvalsA), np.max(varvalsA)]
    4246         else:
    4247             for iv in range(2): varangeB[iv] = np.float(varangeB0[iv])
    4248 
    4249     if not gen.searchInfile(oncB.variables.keys(), commvardim):
     4243        varunits.append(drw.units_lunits(valsB[5]))
     4244    if varangeB0 == 'None':
     4245        varangeB = [valsB[2], valsB[3]]
     4246    elif varangeB0 == 'Extrs':
     4247        varangeA = [np.min(varvalsA), np.max(varvalsA)]
     4248    else:
     4249        for iv in range(2): varangeB[iv] = np.float(varangeB0.split(',')[iv])
     4250
     4251    # Common vardim
     4252    if not gen.searchInlist(oncB.variables.keys(), commonvardim):
    42504253        print errormsg
    42514254        print '  ' + fname + ": B file '" + files[1] + "' does not have common " +   \
     
    42564259
    42574260    # Range of the axis
    4258     varangeaxis = []
    4259     if gen.searchInfile(objvd.ncattrs(), 'units'):
    4260         dimvarunits.append(objvd.getncattr('units'))
    4261     else:
    4262         valsVD = gen.variables_values(commonvardim)
    4263         varunits.append(valsVD[5])
    4264         if varangeaxis0 == 'None':
    4265             varangeaxis = [valsVD[2], valsVD[3]]
    4266         elif varangeaxis0 == 'Extrs':
    4267             varangeaxis[0] = np.min([np.min(varvalsaxisA), np.min(varvalsaxisB)])
    4268             varangeaxis[1] = np.max([np.max(varvalsaxisA), np.max(varvalsaxisB)])
    4269         else:
    4270             for iv in range(2): varangeaxis0[iv] = np.float(varangeaxis[iv])
     4261    varangeaxis = np.zeros((2),dtype=np.float)
     4262
     4263    valsVD = gen.variables_values(commonvardim)
     4264    if gen.searchInlist(objvd.ncattrs(), 'units'):
     4265        dimvarunits = drw.units_lunits(objvd.getncattr('units'))
     4266    else:
     4267        dimvarunits = drw.units_lunits(valsVD[5])
     4268    if varangeaxis0 == 'None':
     4269        varangeaxis = [valsVD[2], valsVD[3]]
     4270    elif varangeaxis0 == 'Extrs':
     4271        varangeaxis[0] = np.min([np.min(varvalsaxisA), np.min(varvalsaxisB)])
     4272        varangeaxis[1] = np.max([np.max(varvalsaxisA), np.max(varvalsaxisB)])
     4273    else:
     4274        for iv in range(2): varangeaxis[iv] = np.float(varangeaxis0.split(',')[iv])
    42714275   
    42724276    oncB.close()
    42734277
    4274     plot_2lines(varvalsA, varvalsB, varvalsaxisA, varvalsaxisB, varangeA, varrangeB, \
    4275       varangeaxis, axisvals, varns, varunits, colors, widths, styles, sizemarks,     \
    4276       marks, graphtitle, labelaxis, lloc, figname, figkind):
     4278    labelaxis = valsVD[0] + ' (' + dimvarunits + ')'
     4279
     4280    # Lines characteristics
     4281    colvalues, linekinds, pointkinds, lwidths, psizes = drw.ColorsLinesPointsStyles( \
     4282      2, colors, styles, marks, widths, sizemarks, 'None')
     4283
     4284    drw.plot_2lines(varvalsA, varvalsB, varvalsaxisA, varvalsaxisB, varangeA,        \
     4285      varangeB, varangeaxis, axisvals, figvarns, varunits, colvalues, lwidths,       \
     4286      linekinds, psizes, pointkinds, graphtitle, labelaxis, lloc, figname, figkind)
    42774287
    42784288#quit()
     
    43144324# Not checking file operation
    43154325Notcheckingfile = ['draw_2D_shad_cont', 'draw_2D_shad_cont_time',                    \
    4316   'draw_2D_shad_line', 'draw_2D_shad_line_time', 'draw_lines', 'draw_lines_time',    \
    4317   'draw_points', 'draw_topo_geogrid_boxes', 'draw_trajectories',                     \
     4326  'draw_2D_shad_line', 'draw_2D_shad_line_time', 'draw_2lines', 'draw_lines',        \
     4327  'draw_lines_time', 'draw_points', 'draw_topo_geogrid_boxes', 'draw_trajectories',  \
    43184328  'draw_vals_trajectories', 'variable_values']
    43194329
     
    43504360elif oper == 'draw_Neighbourghood_evol':
    43514361    draw_Neighbourghood_evol(opts.ncfile, opts.values, opts.varname)
     4362elif oper == 'draw_2lines':
     4363    draw_2lines(opts.ncfile, opts.values, opts.varname)
    43524364elif oper == 'draw_lines':
    43534365    draw_lines(opts.ncfile, opts.values, opts.varname)
  • trunk/tools/drawing_tools.py

    r1071 r1074  
    6767# dxdy_lonlat: Function to provide lon/lat 2D lilke-matrices from any sort of dx,dy values
    6868# plot_2D_shadow_line:
     69# plot_2lines: Function to plot two lines in different axes (x/x2 or y/y2)
    6970# plot_lines: Function to plot a collection of lines
    7071# plot_ZQradii: Function to plot following radial averages only at exact grid poins
     
    74467447  axisvals, varns, varus, cols, wdths, styls, szmks, marks, gtitle, axisn, gloc,     \
    74477448  fign, figk):
    7448     """ Fucntion to plot two lines in different axes (x/x2 or y/y2)
     7449    """ Function to plot two lines in different axes (x/x2 or y/y2)
    74497450      valsA= values to be plotted on axis x or y
    74507451      valsB= values to be plotted on axis x2 or y2
     
    74687469      figk= kind of figure
    74697470    """
    7470     function = 'plot_2lines'
     7471    fname = 'plot_2lines'
    74717472
    74727473    if axisvals == 'x':
    74737474        titX = axisn
    74747475        titX2 = axisn
    7475         titY = varns[0] + ' ' + varus[0]
     7476        titY = varns[0] + ' (' + varus[0] + ')'
    74767477        titY2 = varns[1] + ' (' + varus[1] + ')'
    74777478        xmin = rangeaxis[0]
     
    74847485        ymax2 = rangeB[1]
    74857486    else:
    7486         titX = varns[0] + ' ' + varus[0]
     7487        titX = varns[0] + ' (' + varus[0] + ')'
    74877488        titX2 = varns[1] + ' (' + varus[1] + ')'
    74887489        titY = axisn
     
    75007501    fig, ax1 = plt.subplots()
    75017502
    7502     # line A
     7503    # Plotting lines
     7504    il=0
    75037505    if axisvals == 'x':
    7504         il=0
    7505         ax1.plot(valsaxisA, valsA, styls[il], marker=marks[il], linewidth=wdths[il], \
    7506           markersize=szmks[il], label=varns[il], color=cols[il])
     7506        lA, = ax1.plot(valsaxisA, valsA, styls[il], marker=marks[il],                \
     7507          linewidth=wdths[il], markersize=szmks[il], label=varns[il], color=cols[il])
    75077508        ax1.set_xlabel(titX, color='black')
    75087509        ax1.set_ylabel(titY, color=cols[il])
     
    75107511        ax1.set_ylim(ymin,ymax)
    75117512
    7512         ax2 = ax1.twiny()
     7513        ax2 = ax1.twinx()
    75137514        il = il + 1
    7514         ax2.plot(valsaxisB, valsB, styls[il], marker=marks[il], linewidth=wdths[il], \
    7515           markersize=szmks[il], label=varns[il], color=cols[il])
     7515        lB, = ax2.plot(valsaxisB, valsB, styls[il], marker=marks[il],                \
     7516          linewidth=wdths[il], markersize=szmks[il], label=varns[il], color=cols[il])
    75167517        ax2.set_ylabel(titY2, color=cols[il])
    75177518        ax2.set_ylim(ymin2,ymax2)
    7518     else:
    7519         ax1.plot(valsA, valsaxisA, styls[il], marker=marks[il], linewidth=wdths[il], \
    7520           markersize=szmks[il], label=varns[il], color=cols[il])
     7519        ax2.set_xlim(xmin,xmax)
     7520        titleloc = (0.5,1.)
     7521    else:
     7522        lA, = ax1.plot(valsA, valsaxisA, styls[il], marker=marks[il],                \
     7523          linewidth=wdths[il], markersize=szmks[il], label=varns[il], color=cols[il])
    75217524        ax1.set_xlabel(titX, color=cols[il])
    75227525        ax1.set_ylabel(titY, color='black')
    75237526        ax1.set_xlim(xmin,xmax)
    75247527        ax1.set_ylim(ymin,ymax)
    7525         ax2 = ax1.twinx()
     7528        ax2 = ax1.twiny()
    75267529        il = il + 1
    7527         ax2.plot(valsB, valsaxisB, styls[il], marker=marks[il], linewidth=wdths[il], \
    7528           markersize=szmks[il], label=varns[il], color=cols[il])
     7530        lB, = ax2.plot(valsB, valsaxisB, styls[il], marker=marks[il],                \
     7531          linewidth=wdths[il], markersize=szmks[il], label=varns[il], color=cols[il])
    75297532        ax2.set_xlabel(titX2, color=cols[il])
    75307533        ax2.set_xlim(xmin2,xmax2)
     7534        ax2.set_ylim(ymin,ymax)
     7535        titleloc = (0.5,1.075)
    75317536       
    75327537    graphtit = gtitle.replace('_','\_').replace('&','\&')
    75337538
    7534     plt.set_title(graphtit)
    7535     plt.legend(loc=gloc)
     7539    plt.title(graphtit,position=titleloc)
     7540    # plt.legend([lA, lB], loc=gloc)
    75367541   
    75377542    output_kind(figk, fign, True)
Note: See TracChangeset for help on using the changeset viewer.