Changeset 202


Ignore:
Timestamp:
Jul 11, 2011, 12:02:13 AM (13 years ago)
Author:
aslmd
Message:

MESOSCALE: python graphics interface. much better handling of picture names and a few improvements (new generic functions)

Location:
trunk/MESOSCALE
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/MESOSCALE/LMD_MM_MARS/SRC/POSTPROC/api.F90

    r186 r202  
    418418              dvalj(j) = num_metgrid_levels
    419419        ELSE IF ( LINLOG .eq. 3 ) THEN
    420               dnamej(j) = 'bottom_top' !'altitude'
     420              dnamej(j) = 'altitude' !'bottom_top' !'altitude'
    421421              dvalj(j) = num_metgrid_levels
    422422        ELSE
    423               dnamej(j) = 'bottom_top' !'altitude_abg'
     423              dnamej(j) = 'altitude_abg' !'bottom_top' !'altitude_abg'
    424424              dvalj(j) = num_metgrid_levels
    425425        ENDIF
     
    793793                 IF ( test_dim_name == 'bottom_top_stag' ) fix_meta_stag = .TRUE.
    794794                 IF (LINLOG .le. 2) test_dim_name = 'pressure'
    795                  IF (LINLOG .eq. 3) test_dim_name = 'bottom_top' !'altitude'
    796                  IF (LINLOG .eq. 4) test_dim_name = 'bottom_top' !'altitude_abg'
     795                 IF (LINLOG .eq. 3) test_dim_name = 'altitude' !'bottom_top' !'altitude'
     796                 IF (LINLOG .eq. 4) test_dim_name = 'altitude_abg' !'bottom_top' !'altitude_abg'
    797797                 interpolate = .TRUE.
    798798            ENDIF
     
    970970                                        IF ( ii == 2 ) test_dim_name = 'south_north'
    971971                                        IF (( ii == 3 ) .and. (LINLOG .le. 2))  test_dim_name = 'pressure'
    972                                         IF (( ii == 3 ) .and. (LINLOG .eq. 3))  test_dim_name = 'bottom_top' !'altitude'
    973                                         IF (( ii == 3 ) .and. (LINLOG .eq. 4))  test_dim_name = 'bottom_top' !'altitude_abg'
     972                                        IF (( ii == 3 ) .and. (LINLOG .eq. 3))  test_dim_name = 'altitude' !'bottom_top' !'altitude'
     973                                        IF (( ii == 3 ) .and. (LINLOG .eq. 4))  test_dim_name = 'altitude_abg' !'bottom_top' !'altitude_abg'
    974974                                        IF ( ii == 4 ) test_dim_name = 'Time'
    975975                                        DO jj = 1,j
  • trunk/MESOSCALE/PLOT/PYTHON/mylib/myplot.py

    r201 r202  
    6262    return lschar, zehour, zehourin
    6363
     64def getprefix (nc):
     65    prefix = 'LMD_MMM_'
     66    prefix = prefix + 'd'+str(getattr(nc,'GRID_ID'))+'_'
     67    prefix = prefix + str(int(getattr(nc,'DX')/1000.))+'km_'
     68    return prefix
     69
    6470def api_onelevel (  path_to_input   = None, \
    6571                    input_name      = 'wrfout_d0?_????-??-??_??:00:00', \
     
    177183        return improc
    178184
     185def getwinds (nc,charu='Um',charv='Vm'):
     186    import numpy as np
     187    u = nc.variables[charu]
     188    v = nc.variables[charv]
     189    if charu == 'U': u = u[:, :, :, 0:len(u[0,0,0,:])-1]
     190    if charv == 'V': v = v[:, :, 0:len(v[0,0,:,0])-1, :]
     191                     ### ou alors prendre les coordonnees speciales
     192    return u,v
     193
    179194def vectorfield (u, v, x, y, stride=3, scale=15., factor=250., color='black', csmooth=1, key=True):
    180195    ## scale regle la reference du vecteur
     
    182197    import  matplotlib.pyplot               as plt
    183198    import  numpy                           as np
    184     #posx = np.max(x) + np.std(x) / 3.  ## pb pour les domaines globaux ...
    185     #posy = np.mean(y)
    186     #posx = np.min(x)
    187     #posy = np.max(x)
    188     #posx = np.max(x) - np.std(x) / 10.
    189     #posy = np.max(y) + np.std(y) / 10.
    190199    posx = np.min(x) - np.std(x) / 10.
    191200    posy = np.min(y) - np.std(y) / 10.
     
    199208                    angles='xy',color=color,\
    200209                    scale=factor,width=widthvec )
    201     if color=='white':     kcolor='black'
    202     elif color=='yellow':  kcolor=color
    203     else:                  kcolor=color
     210    if color in ['white','yellow']:     kcolor='black'
     211    else:                               kcolor=color
    204212    if key: p = plt.quiverkey(q,posx,posy,scale,\
    205213                   str(int(scale)),coordinates='data',color=kcolor,labelpos='S',labelsep = 0.03)
     
    233241    else:                  blat = wlat[0]
    234242    h = 2000.
    235     radius = 3397200
     243    radius = 3397200.
    236244    if   char == "cyl":     m = Basemap(rsphere=radius,projection='cyl',\
    237245                              llcrnrlat=wlat[0],urcrnrlat=wlat[1],llcrnrlon=wlon[0],urcrnrlon=wlon[1])
     
    261269                "def":          "%.1e",\
    262270                "PTOT":         "%.0f",\
     271                "HGT":          "%.1e",\
    263272                "USTM":         "%.2f",\
    264273                        }
     
    266275                whichvar = "def"
    267276        return fmtvar[whichvar]
     277
     278def defcolorb (whichone="def"):
     279        whichcolorb =    { \
     280                "def":          "spectral",\
     281                "HGT":          "spectral",\
     282                "tk":           "gist_heat",\
     283                "QH2O":         "PuBu",\
     284                         }
     285        if whichone not in whichcolorb:
     286                whichone = "def"
     287        return whichcolorb[whichone]
     288
     289def definecolorvec (whichone="def"):
     290        whichcolor =    { \
     291                "def":          "black",\
     292                "vis":          "yellow",\
     293                "vishires":     "yellow",\
     294                "molabw":       "yellow",\
     295                "mola":         "black",\
     296                "gist_heat":    "white",\
     297                "hot":          "tk",\
     298                "gist_rainbow": "black",\
     299                "spectral":     "black",\
     300                "gray":         "red",\
     301                "PuBu":         "black",\
     302                        }
     303        if whichone not in whichcolor:
     304                whichone = "def"
     305        return whichcolor[whichone]
    268306
    269307def marsmap (whichone="vishires"):
  • trunk/MESOSCALE/PLOT/PYTHON/scripts/domain.py

    r184 r202  
    11#!/usr/bin/env python
    22
    3 ### A. Spiga -- LMD -- 30/05/2011
     3### A. Spiga -- LMD -- 30/06/2011 -- slight modif early 07/2011
    44
    5 def domain (namefile,proj="ortho",back="molabw",target=None,var='HGT'):
     5def domain (namefile,proj="ortho",back="vishires",target=None,var='HGT'):
    66    from netCDF4 import Dataset
    7     from myplot import getcoord2d,define_proj,makeplotpng,simplinterv
    8     from matplotlib.pyplot import contourf
     7    from myplot import getcoord2d,define_proj,makeplotpng,simplinterv,getprefix
     8    from matplotlib.pyplot import contourf,rcParams
     9    from numpy.core.defchararray import find
     10    ###
    911    nc  = Dataset(namefile)
     12    ###
    1013    [lon2d,lat2d] = getcoord2d(nc)
    1114    [wlon,wlat] = simplinterv(lon2d,lat2d)
     15    ###
    1216    m = define_proj(proj,wlon,wlat,back=back)
    1317    x, y = m(lon2d, lat2d)
     18    ###
    1419    contourf(x, y, nc.variables[var][0,:,:], 40)
    15     if not target:   zeplot = namefile+".domain"
    16     else:            zeplot = target+"/domain"
     20    ###
     21    zeplot = getprefix(nc) + "domain"
     22    if not target:   zeplot = namefile[0:find(namefile,'wrfout')] + zeplot
     23    else:            zeplot = target + "/" + zeplot         
     24    ###
    1725    makeplotpng(zeplot,pad_inches_value=0.35)
     26    #rcParams['savefig.facecolor'] = 'black'
     27    #makeplotpng(zeplot+"b",pad_inches_value=0.35)
    1828
    1929if __name__ == "__main__":
     
    2232    from optparse import OptionParser
    2333    parser = OptionParser()
    24     parser.add_option('-f', action='store', dest='namefile',    type="string",  default=None,     help='name of WRF file [NEEDED]')
    25     parser.add_option('-p', action='store', dest='proj',        type="string",  default="ortho",  help='projection')
    26     parser.add_option('-b', action='store', dest='back',        type="string",  default="molabw", help='background')
    27     parser.add_option('-t', action='store', dest='target',      type="string",  default=None,     help='destination folder')
    28     parser.add_option('-v', action='store', dest='var',         type="string",  default='HGT',    help='variable contoured')
     34    parser.add_option('-f', action='store', dest='namefile',    type="string",  default=None,       help='name of WRF file [NEEDED]')
     35    parser.add_option('-p', action='store', dest='proj',        type="string",  default="ortho",    help='projection')
     36    parser.add_option('-b', action='store', dest='back',        type="string",  default="vishires", help='background')
     37    parser.add_option('-t', action='store', dest='target',      type="string",  default=None,       help='destination folder')
     38    parser.add_option('-v', action='store', dest='var',         type="string",  default='HGT',      help='variable contoured')
    2939    (opt,args) = parser.parse_args()
    3040    if opt.namefile is None:
  • trunk/MESOSCALE/PLOT/PYTHON/scripts/winds.py

    r201 r202  
    11#!/usr/bin/env python
    22
    3 ### A. Spiga -- LMD -- 30/06/2011 to 04/07/2011
     3### A. Spiga -- LMD -- 30/06/2011 to 10/07/2011
    44### Thanks to A. Colaitis for the parser trick
    55
     
    3030    ### Load librairies and functions
    3131    from netCDF4 import Dataset
    32     from myplot import getcoord2d,define_proj,makeplotpng,simplinterv,vectorfield,ptitle,latinterv,getproj,wrfinterv,dumpbdy,fmtvar
     32    from myplot import getcoord2d,define_proj,makeplotpng,simplinterv,vectorfield,ptitle,latinterv,getproj,wrfinterv,dumpbdy,\
     33                       fmtvar,definecolorvec,getwinds,defcolorb,getprefix
    3334    from mymath import deg,max,min,mean
    34     from matplotlib.pyplot import contourf, subplot, figure, rcParams, savefig, colorbar, pcolor
     35    from matplotlib.pyplot import contour,contourf, subplot, figure, rcParams, savefig, colorbar, pcolor
    3536    from matplotlib.cm import get_cmap
    3637    import numpy as np
     38    from numpy.core.defchararray import find
     39
     40    ###
     41    #rcParams['text.usetex'] = True
     42    #rcParams['cairo.format'] = 'svg'
    3743
    3844    ######################
     
    7884    elif proj == "lcc":      [wlon,wlat] = wrfinterv(lon2d,lat2d)
    7985    else:                    [wlon,wlat] = simplinterv(lon2d,lat2d)
    80 
    81     ###################
    82     #### Get local time
    83     #if typefile in ['mesoapi','meso']: 
    84     #    ltst = interv[0]
    85     #    #ltst = int(getattr(nc, 'GMT') + 0.5*(wlon[0]+wlon[1])/15.)
    86     #elif typefile in ['gcm']:           
    87     #    ltst = 0
    8886
    8987    ##############################################################################
     
    118116        else:             zevmax = vmax
    119117        print "bounds ", zevmin, zevmax
     118        ### some already defined colormaps
     119        if colorb is True:    colorb = defcolorb(var)
    120120 
    121121    ###########################
     
    128128    #########################################
    129129    ### Name for title and graphics save file
    130     if winds:   basename = "WINDS_"
     130    if winds:   basename = "UV_"
    131131    else:       basename = ""
    132     if var:
    133         basename = basename + var
    134     if   typefile is 'meso':                    stralt = "_lvl" + str(nvert)
     132    if var:     basename = basename + var
     133    ###
     134    if typefile is 'meso':                      stralt = "_lvl" + str(nvert)
    135135    elif typefile is 'mesoapi': 
    136136        zelevel = int(nc.variables['vert'][nvert])
    137         if 'altitude_abg'   in nc.dimensions:   stralt = "_"+str(zelevel)+"m-ALS"
    138         elif 'bottom_top'   in nc.dimensions:   stralt = "_"+str(zelevel)+"m-AMR"
     137        if 'altitude'       in nc.dimensions:   stralt = "_"+str(zelevel)+"m-AMR"
     138        elif 'altitude_abg' in nc.dimensions:   stralt = "_"+str(zelevel)+"m-ALS"
     139        elif 'bottom_top'   in nc.dimensions:   stralt = "_"+str(zelevel)+"m"
    139140        elif 'pressure'     in nc.dimensions:   stralt = "_"+str(zelevel)+"Pa"
    140141    else:                                       stralt = ""         
     142    ###
    141143    basename = basename + stralt
    142144
     
    147149        if   numplot == 4:
    148150            sub = 221
    149             #fig.subplots_adjust(wspace = 0.1, hspace = 0.3)
    150151            fig.subplots_adjust(wspace = 0.3, hspace = 0.3)
    151152            rcParams['font.size'] = int( rcParams['font.size'] * 2. / 3. )
     
    156157        elif numplot == 3:
    157158            sub = 131
    158             fig.subplots_adjust(wspace = 0.3)
    159             rcParams['font.size'] = int( rcParams['font.size'] * 2. / 3. )
     159            fig.subplots_adjust(wspace = 0.5)
     160            rcParams['font.size'] = int( rcParams['font.size'] * 1. / 2. )
    160161        elif numplot == 6:
    161162            sub = 231
    162163            fig.subplots_adjust(wspace = 0.4, hspace = 0.0)
    163             rcParams['font.size'] = int( rcParams['font.size'] * 2. / 3. )
     164            rcParams['font.size'] = int( rcParams['font.size'] * 1. / 2. )
    164165        elif numplot == 8:
    165166            sub = 331 #241
    166             fig.subplots_adjust(wspace = 0.1, hspace = 0.3)
     167            fig.subplots_adjust(wspace = 0.3, hspace = 0.3)
    167168            rcParams['font.size'] = int( rcParams['font.size'] * 1. / 2. )
    168169        elif numplot == 9:
    169170            sub = 331
    170             fig.subplots_adjust(wspace = 0.1, hspace = 0.3)
     171            fig.subplots_adjust(wspace = 0.3, hspace = 0.3)
    171172            rcParams['font.size'] = int( rcParams['font.size'] * 1. / 2. )
    172173        elif numplot == 1:
     
    223224           else:   
    224225               pcolor( x, y, what_I_plot, cmap = get_cmap(name=colorb), vmin=zevmin, vmax=zevmax )
    225            if colorb:     colorbar(fraction=0.05,pad=0.1,format=fmtvar(var))
     226           if var in ['HGT']:        pass
     227           elif colorb:              colorbar(fraction=0.05,pad=0.1,format=fmtvar(var))
    226228
    227229       ### Vector plot
     
    234236               key = False
    235237           if metwind:  [vecx,vecy] = m.rotate_vector(vecx, vecy, lon2d, lat2d)
    236            if var == None and back == "vishires":  colorvec = 'w'
    237            else:                                   colorvec = 'k'
     238           if var == None:        colorvec = definecolorvec(back)
     239           else:                  colorvec = definecolorvec(colorb)
    238240           vectorfield(vecx, vecy,\
    239241                      x, y, stride=stride, csmooth=stride,\
     
    242244       
    243245       ### Next subplot
    244        plottitle = basename + "_LT"+str(ltst)
    245        if addchar:  plottitle = plottitle + addchar
     246       plottitle = basename
     247       if addchar:  plottitle = plottitle + addchar + "_LT"+str(ltst)
     248       else:        plottitle = plottitle + "_LT"+str(ltst)
    246249       ptitle( plottitle )
    247250       sub += 1
     
    249252    ##########################################################################
    250253    ### Save the figure in a file in the data folder or an user-defined folder
    251     if not target:    zeplot = namefile+"_"+basename
    252     else:             zeplot = target+"/"+basename
    253     if numplot <= 0:  zeplot = zeplot + "_LT"+str(abs(numplot))
     254    if typefile in ['meso','mesoapi']:   prefix = getprefix(nc)   
     255    elif typefile in ['gcm']:            prefix = 'LMD_GCM_'
     256    else:                                prefix = ''
     257    ###
     258    zeplot = prefix + basename
     259    if addchar:         zeplot = zeplot + addchar
     260    if numplot <= 0:    zeplot = zeplot + "_LT"+str(abs(numplot))
     261    ###
     262    if not target:      zeplot = namefile[0:find(namefile,'wrfout')] + zeplot
     263    else:               zeplot = target + "/" + zeplot 
     264    ###
    254265    if found_lct:     makeplotpng(zeplot,pad_inches_value=0.35)   
    255266    else:             print "Local time not found"
     267
     268    ###############
     269    ### Now the end
    256270    return zeplot
    257 
    258 
    259 ####################################################
    260 ####################################################
    261 ### A simple program to get wind vectors' components
    262 def getwinds (nc,charu='Um',charv='Vm'):
    263     import numpy as np
    264     u = nc.variables[charu]
    265     v = nc.variables[charv]
    266     if charu == 'U': u = u[:, :, :, 0:len(u[0,0,0,:])-1]
    267     if charv == 'V': v = v[:, :, 0:len(v[0,0,:,0])-1, :]
    268                      ### ou alors prendre les coordonnees speciales
    269     return u,v
    270 
    271 
    272271
    273272###########################################################################################
     
    293292    parser.add_option('-n', action='store', dest='numplot',     type="int",     default=4,     help='number of plots (def=1)(<0: 1 plot of LT -*numplot*)')
    294293    parser.add_option('-i', action='store', dest='interp',      type="int",     default=None,  help='interpolation method (2: press, 3: z-amr, 4:z-als)')
    295     parser.add_option('-c', action='store', dest='colorb',      type="string",  default=True,  help='change colormap (and draw a colorbar)')
     294    parser.add_option('-c', action='store', dest='colorb',      type="string",  default=True,  help='change colormap')
    296295    parser.add_option('-x', action='store_false', dest='winds',                 default=True,  help='flag: no wind vectors')
    297296    parser.add_option('-m', action='store', dest='vmin',        type="float",   default=None,  help='bounding minimum value for color plot')   
     
    334333           proj=opt.proj,back=opt.back,target=opt.target,stride=opt.stride,var=opt.var,numplot=opt.numplot,colorb=opt.colorb,winds=opt.winds,\
    335334           addchar=lschar,interv=[zehour,zehourin],vmin=opt.vmin,vmax=opt.vmax,tile=opt.tile)
     335    print 'Done: '+name
    336336
    337337    #########################################################
Note: See TracChangeset for help on using the changeset viewer.