Changeset 785 in lmdz_wrf
- Timestamp:
- May 28, 2016, 5:07:13 PM (9 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/drawing.py
r782 r785 3333 3333 3334 3334 def draw_basins(ncfile, values, varns): 3335 """ Function to plot wind basins3335 """ Function to plot river basins with their discharge vector and basins id (from 'routing.nc') 3336 3336 values= [lonlatbox]:[mapres]:[cbarname]:[xtrmbasin]:[mapdraw]:[veclength]:[freq]: 3337 3337 [ifreq]:[plotcountry]:[basinidn]:[gtit]:[kindfig]:[figuren] -
trunk/tools/drawing_tools.py
r782 r785 11 11 from netCDF4 import Dataset as NetCDFFile 12 12 import nc_var_tools as ncvar 13 import generic_tools as gen 13 14 14 15 errormsg = 'ERROR -- error -- ERROR -- error' … … 6397 6398 return 6398 6399 6400 def plot_river_pattern(xvals, yvals, fvals, veccolor, descid, desclon, desclat, \ 6401 stn, stlon, stlat, drawcountry, drawbasinid, colordescid, coloriver, colornoriver, \ 6402 colorst, graphtit, mapv, kfig, figname): 6403 """ Function to plot vectors 6404 xvals= values for the x-axis 6405 yvals= values for the y-axis 6406 fvals= values for the flow (1-8: N, NE, E, ..., NW; 97: sub-basin; 98: small to sea; 99: large to sea) 6407 veccolor= basin id 6408 descid= description id 6409 , desclon, desclat, 6410 mapv= map characteristics: [proj],[res] 6411 see full documentation: http://matplotlib.org/basemap/ 6412 [proj]: projection 6413 * 'cyl', cilindric 6414 * 'lcc', lambert conformal 6415 [res]: resolution: 6416 * 'c', crude 6417 * 'l', low 6418 * 'i', intermediate 6419 * 'h', high 6420 * 'f', full 6421 drawcountry= whether country lines should be plotted or not 6422 drawbasinid= whether basins id should be plotted or not 6423 graphtit= title of the graph ('|', for spaces) 6424 kfig= kind of figure 6425 figname= name of the figure 6426 """ 6427 fname = 'plot_river_pattern' 6428 6429 dx=xvals.shape[1] 6430 dy=xvals.shape[0] 6431 xmin = np.min(xvals) 6432 xmax = np.max(xvals) 6433 ymin = np.min(yvals) 6434 ymax = np.max(yvals) 6435 6436 # flow direction 6437 6438 plt.rc('text', usetex=True) 6439 6440 ddx = np.abs(xvals[dy/2+1,dx/2] - xvals[dy/2,dx/2]) 6441 ddy = np.abs(yvals[dy/2,dx/2+1] - yvals[dy/2,dx/2]) 6442 fontcharac = {'family': 'serif', 'weight': 'normal', 'size': 3} 6443 6444 xlabpos = [] 6445 ylabpos = [] 6446 labels = [] 6447 labcol = [] 6448 flow = [] 6449 flowvals = [] 6450 xtrack = [] 6451 ytrack = [] 6452 colortrack = [] 6453 trackid = [] 6454 stnlL = [] 6455 stlonlL = [] 6456 stlatlL = [] 6457 6458 # Setting up colors for each label 6459 # From: http://stackoverflow.com/questions/15235630/matplotlib-pick-up-one-color-associated-to-one-value-in-a-colorbar 6460 my_cmap = plt.cm.get_cmap(colordescid) 6461 vcolmin = np.min(descid) 6462 vcolmax = np.max(descid) 6463 print 'Lluis vcolmin:',vcolmin,'vcolmax:',vcolmax 6464 6465 norm = mpl.colors.Normalize(vcolmin, vcolmax) 6466 6467 # Vector angles 6468 lengthtrac = np.float(xvals[0,1] - xvals[0,0]) 6469 lengthtrac2 = lengthtrac*np.sqrt(2.) 6470 6471 for j in range(0,dy): 6472 for i in range(0,dx): 6473 if veccolor[j,i] != '--': 6474 # ibeg = xvals[j,i]-lengthtrac/2. 6475 # jbeg = yvals[j,i]-lengthtrac/2. 6476 ibeg = xvals[j,i] 6477 jbeg = yvals[j,i] 6478 labels.append(int(veccolor[j,i])) 6479 flowvals.append(fvals[j,i]) 6480 angle = (fvals[j,i] - 1)*np.pi/4 6481 if gen.searchInlist([2,4,6,8], fvals[j,i]): 6482 iend = ibeg + lengthtrac2*np.sin(angle) 6483 jend = jbeg + lengthtrac2*np.cos(angle) 6484 elif gen.searchInlist([1,3,5,7], fvals[j,i]): 6485 iend = ibeg + lengthtrac*np.sin(angle) 6486 jend = jbeg + lengthtrac*np.cos(angle) 6487 else: 6488 ibeg = xvals[j,i] 6489 jbeg = yvals[j,i] 6490 iend = None 6491 jend = None 6492 6493 xlabpos.append(ibeg) 6494 ylabpos.append(jbeg) 6495 xtrack.append(ibeg) 6496 xtrack.append(iend) 6497 xtrack.append(None) 6498 ytrack.append(jbeg) 6499 ytrack.append(jend) 6500 ytrack.append(None) 6501 if len(desclon.shape) == 2: 6502 difflonlat = np.sqrt((desclon-xvals[j,i])**2 + (desclat-yvals[j,i])**2) 6503 mindiffLl = np.min(difflonlat) 6504 ilatlon = gen.index_mat(difflonlat, mindiffLl) 6505 else: 6506 ilatlon = np.zeros((2), dtype=int) 6507 difflon = np.abs(desclon - xvals[j,i]) 6508 mindiffl = np.min(difflon) 6509 ilatlon[1] = gen.index_vec(difflon,mindiffl) 6510 difflat = np.abs(desclat - yvals[j,i]) 6511 mindiffL = np.min(difflat) 6512 ilatlon[0] = gen.index_vec(difflat,mindiffL) 6513 6514 if descid.mask[ilatlon[0],ilatlon[1]]: 6515 labcol.append(colornoriver) 6516 colortrack.append(colornoriver) 6517 else: 6518 if veccolor[j,i] != 6: 6519 print 'Lluis: veccol:', veccolor[j,i], 'mindiffl', mindiffl,'mindiffL:',mindiffL 6520 else: 6521 print 'Lluis right! mindiffl', mindiffl,'mindiffL:',mindiffL 6522 labcol.append(coloriver) 6523 colortrack.append(my_cmap(norm(descid[ilatlon[0],ilatlon[1]]))) 6524 6525 trackid.append(descid[ilatlon[0],ilatlon[1]]) 6526 6527 totvals = len(flowvals) 6528 6529 if not mapv is None: 6530 lon00 = np.where(xvals[:] < 0., 360. + xvals[:], xvals[:]) 6531 lat00 = yvals[:] 6532 6533 map_proj=mapv.split(',')[0] 6534 map_res=mapv.split(',')[1] 6535 6536 nlon = np.min(xvals) 6537 xlon = np.max(xvals) 6538 nlat = np.min(yvals) 6539 xlat = np.max(yvals) 6540 6541 lon2 = xvals[dy/2,dx/2] 6542 lat2 = yvals[dy/2,dx/2] 6543 6544 print 'lon2:', lon2, 'lat2:', lat2, 'SW pt:', nlon, ',', nlat, 'NE pt:', \ 6545 xlon, ',', xlat 6546 6547 if map_proj == 'cyl': 6548 m = Basemap(projection=map_proj, llcrnrlon=nlon, llcrnrlat=nlat, \ 6549 urcrnrlon=xlon, urcrnrlat= xlat, resolution=map_res) 6550 elif map_proj == 'lcc': 6551 m = Basemap(projection=map_proj, lat_0=lat2, lon_0=lon2, llcrnrlon=nlon, \ 6552 llcrnrlat=nlat, urcrnrlon=xlon, urcrnrlat= xlat, resolution=map_res) 6553 else: 6554 print errormsg 6555 print ' ' + fname + ": projection '" + map_proj + "' not ready!!" 6556 print ' projections available: cyl, lcc' 6557 quit(-1) 6558 6559 m.drawcoastlines() 6560 drawcountry = True 6561 if drawcountry: m.drawcountries() 6562 6563 meridians = pretty_int(nlon,xlon,5) 6564 m.drawmeridians(meridians,labels=[True,False,False,True],color="black") 6565 6566 parallels = pretty_int(nlat,xlat,5) 6567 m.drawparallels(parallels,labels=[False,True,True,False],color="black") 6568 6569 plt.xlabel('W-E') 6570 plt.ylabel('S-N') 6571 6572 j = 0 6573 for i in range(len(xlabpos)): 6574 plt.plot(xtrack[j:j+2], ytrack[j:j+2], color=colortrack[i]) 6575 j = j + 3 6576 6577 # Sea-flow 6578 for i in range(len(xlabpos)): 6579 if flowvals[i] == 97: 6580 plt.plot(xlabpos[i], ylabpos[i], 'x', color=colortrack[i]) 6581 elif flowvals[i] == 98: 6582 plt.plot(xlabpos[i], ylabpos[i], '*', color=colortrack[i]) 6583 elif flowvals[i] == 99: 6584 plt.plot(xlabpos[i], ylabpos[i], 'h', color=colortrack[i]) 6585 6586 plt.xlim(xmin,xmax) 6587 plt.ylim(ymin,ymax) 6588 6589 if drawbasinid: 6590 for i in range(len(xlabpos)): 6591 plt.text(xlabpos[i]+0.05*lengthtrac, ylabpos[i]+0.05*lengthtrac, labels[i], \ 6592 color=labcol[i], fontdict=fontcharac) 6593 # plt.text(xlabpos[i]+0.1*lengthtrac, ylabpos[i]+0.1*lengthtrac, trackid[i], \ 6594 # color=colortrack[i], fontdict=fontcharac) 6595 # plt.text(xlabpos[i]+0.1*lengthtrac, ylabpos[i]+0.1*lengthtrac, str(flowvals[i]), \ 6596 # color=colortrack[i], fontdict=fontcharac) 6597 6598 for ist in range(len(stlon)): 6599 if stlon[ist] > xmin and stlon[ist] < xmax and stlat[ist] > ymin and stlat[ist] < ymax: 6600 stname = '*' 6601 for ic in range(len(stn[ist,:])): 6602 stname = stname + stn[ist,ic] 6603 # plt.annotate(stname, xy=(stlon[ist],stlat[ist]), color=colorst, ) 6604 plt.text(stlon[ist], stlat[ist], stname, color=colorst, fontsize=3) 6605 6606 # cbar = plt.colorbar() 6607 plt.title(graphtit.replace('&','\&')) 6608 6609 output_kind(kfig, figname, True) 6610 6611 return 6612 6399 6613 def var_3desc(ovar): 6400 6614 """ Function to provide std_name, long_name and units from an object variable
Note: See TracChangeset
for help on using the changeset viewer.