def plot_topo_file(topoplotdata): """ Read in a topo or bathy file and produce a pcolor map. """ import os import pylab from pyclaw.data import Data fname = topoplotdata.fname topotype = topoplotdata.topotype if topoplotdata.climits: # deprecated option cmin = topoplotdata.climits[0] cmax = topoplotdata.climits[1] else: cmin = topoplotdata.cmin cmax = topoplotdata.cmax figno = topoplotdata.figno addcolorbar = topoplotdata.addcolorbar addcontour = topoplotdata.addcontour contour_levels = topoplotdata.contour_levels xlimits = topoplotdata.xlimits ylimits = topoplotdata.ylimits coarsen = topoplotdata.coarsen imshow = topoplotdata.imshow gridedges_show = topoplotdata.gridedges_show neg_cmap = topoplotdata.neg_cmap pos_cmap = topoplotdata.pos_cmap print_fname = topoplotdata.print_fname if neg_cmap is None: neg_cmap = colormaps.make_colormap({ cmin: [0.3, 0.2, 0.1], 0: [0.95, 0.9, 0.7] }) if pos_cmap is None: pos_cmap = colormaps.make_colormap({ 0: [.5, .7, 0], cmax: [.2, .5, .2] }) if abs(topotype) == 1: X, Y, topo = topotools.topofile2griddata(fname, topotype) topo = pylab.flipud(topo) Y = pylab.flipud(Y) x = X[0, :] y = Y[:, 0] xllcorner = x[0] yllcorner = y[0] cellsize = x[1] - x[0] elif abs(topotype) == 3: file = open(fname, 'r') lines = file.readlines() ncols = int(lines[0].split()[0]) nrows = int(lines[1].split()[0]) xllcorner = float(lines[2].split()[0]) yllcorner = float(lines[3].split()[0]) cellsize = float(lines[4].split()[0]) NODATA_value = int(lines[5].split()[0]) print "Loading file ", fname print " nrows = %i, ncols = %i" % (nrows, ncols) topo = pylab.loadtxt(fname, skiprows=6, dtype=float) print " Done loading" if 0: topo = [] for i in range(nrows): topo.append(pylab.array(lines[6 + i], )) print '+++ topo = ', topo topo = pylab.array(topo) topo = pylab.flipud(topo) x = pylab.linspace(xllcorner, xllcorner + ncols * cellsize, ncols) y = pylab.linspace(yllcorner, yllcorner + nrows * cellsize, nrows) print "Shape of x, y, topo: ", x.shape, y.shape, topo.shape else: raise Exception("*** Only topotypes 1 and 3 supported so far") if coarsen > 1: topo = topo[slice(0, nrows, coarsen), slice(0, ncols, coarsen)] x = x[slice(0, ncols, coarsen)] y = y[slice(0, nrows, coarsen)] print "Shapes after coarsening: ", x.shape, y.shape, topo.shape if topotype < 0: topo = -topo if figno: pylab.figure(figno) if topoplotdata.imshow: color_norm = Normalize(cmin, cmax, clip=True) xylimits = (x[0], x[-1], y[0], y[-1]) #pylab.imshow(pylab.flipud(topo.T), extent=xylimits, \ pylab.imshow(pylab.flipud(topo), extent=xylimits, \ cmap=cmap, interpolation='nearest', \ norm=color_norm) else: neg_topo = ma.masked_where(topo > 0., topo) all_masked = (ma.count(neg_topo) == 0) if not all_masked: pylab.pcolormesh(x, y, neg_topo, cmap=neg_cmap) pylab.clim([cmin, 0]) if addcolorbar: pylab.colorbar() pos_topo = ma.masked_where(topo < 0., topo) all_masked = (ma.count(pos_topo) == 0) if not all_masked: pylab.pcolormesh(x, y, pos_topo, cmap=pos_cmap) pylab.clim([0, cmax]) if addcolorbar: pylab.colorbar() pylab.axis('scaled') if addcontour: pylab.contour(x, y, topo, levels=contour_levels, colors='k') if gridedges_show: pylab.plot([x[0], x[-1]], [y[0], y[0]], 'k') pylab.plot([x[0], x[-1]], [y[-1], y[-1]], 'k') pylab.plot([x[0], x[0]], [y[0], y[-1]], 'k') pylab.plot([x[-1], x[-1]], [y[0], y[-1]], 'k') if print_fname: fname2 = os.path.splitext(fname)[0] pylab.text(xllcorner + cellsize, yllcorner + cellsize, fname2, color='m') topodata = Data() topodata.x = x topodata.y = y topodata.topo = topo return topodata
def plot_topo_file(topoplotdata): """ Read in a topo or bathy file and produce a pcolor map. """ import os import pylab from pyclaw.data import Data fname = topoplotdata.fname topotype = topoplotdata.topotype if topoplotdata.climits: # deprecated option cmin = topoplotdata.climits[0] cmax = topoplotdata.climits[1] else: cmin = topoplotdata.cmin cmax = topoplotdata.cmax figno = topoplotdata.figno addcolorbar = topoplotdata.addcolorbar addcontour = topoplotdata.addcontour contour_levels = topoplotdata.contour_levels xlimits = topoplotdata.xlimits ylimits = topoplotdata.ylimits coarsen = topoplotdata.coarsen imshow = topoplotdata.imshow gridedges_show = topoplotdata.gridedges_show neg_cmap = topoplotdata.neg_cmap pos_cmap = topoplotdata.pos_cmap print_fname = topoplotdata.print_fname if neg_cmap is None: neg_cmap = colormaps.make_colormap({cmin:[0.3,0.2,0.1], 0:[0.95,0.9,0.7]}) if pos_cmap is None: pos_cmap = colormaps.make_colormap({ 0:[.5,.7,0], cmax:[.2,.5,.2]}) if abs(topotype) == 1: X,Y,topo = topotools.topofile2griddata(fname, topotype) topo = pylab.flipud(topo) Y = pylab.flipud(Y) x = X[0,:] y = Y[:,0] xllcorner = x[0] yllcorner = y[0] cellsize = x[1]-x[0] elif abs(topotype) == 3: file = open(fname, 'r') lines = file.readlines() ncols = int(lines[0].split()[0]) nrows = int(lines[1].split()[0]) xllcorner = float(lines[2].split()[0]) yllcorner = float(lines[3].split()[0]) cellsize = float(lines[4].split()[0]) NODATA_value = int(lines[5].split()[0]) print "Loading file ",fname print " nrows = %i, ncols = %i" % (nrows,ncols) topo = pylab.loadtxt(fname,skiprows=6,dtype=float) print " Done loading" if 0: topo = [] for i in range(nrows): topo.append(pylab.array(lines[6+i],)) print '+++ topo = ',topo topo = pylab.array(topo) topo = pylab.flipud(topo) x = pylab.linspace(xllcorner, xllcorner+ncols*cellsize, ncols) y = pylab.linspace(yllcorner, yllcorner+nrows*cellsize, nrows) print "Shape of x, y, topo: ", x.shape, y.shape, topo.shape else: raise Exception("*** Only topotypes 1 and 3 supported so far") if coarsen > 1: topo = topo[slice(0,nrows,coarsen), slice(0,ncols,coarsen)] x = x[slice(0,ncols,coarsen)] y = y[slice(0,nrows,coarsen)] print "Shapes after coarsening: ", x.shape, y.shape, topo.shape if topotype < 0: topo = -topo if figno: pylab.figure(figno) if topoplotdata.imshow: color_norm = Normalize(cmin,cmax,clip=True) xylimits = (x[0],x[-1],y[0],y[-1]) #pylab.imshow(pylab.flipud(topo.T), extent=xylimits, \ pylab.imshow(pylab.flipud(topo), extent=xylimits, \ cmap=cmap, interpolation='nearest', \ norm=color_norm) else: neg_topo = ma.masked_where(topo>0., topo) all_masked = (ma.count(neg_topo) == 0) if not all_masked: pylab.pcolormesh(x,y,neg_topo,cmap=neg_cmap) pylab.clim([cmin,0]) if addcolorbar: pylab.colorbar() pos_topo = ma.masked_where(topo<0., topo) all_masked = (ma.count(pos_topo) == 0) if not all_masked: pylab.pcolormesh(x,y,pos_topo,cmap=pos_cmap) pylab.clim([0,cmax]) if addcolorbar: pylab.colorbar() pylab.axis('scaled') if addcontour: pylab.contour(x,y,topo,levels=contour_levels,colors='k') if gridedges_show: pylab.plot([x[0],x[-1]],[y[0],y[0]],'k') pylab.plot([x[0],x[-1]],[y[-1],y[-1]],'k') pylab.plot([x[0],x[0]],[y[0],y[-1]],'k') pylab.plot([x[-1],x[-1]],[y[0],y[-1]],'k') if print_fname: fname2 = os.path.splitext(fname)[0] pylab.text(xllcorner+cellsize, yllcorner+cellsize, fname2, color='m') topodata = Data() topodata.x = x topodata.y = y topodata.topo = topo return topodata
def plot_profiles(profiles,topo_type=1,factor=4,verbose=True): import tempfile import shutil import matplotlib.pyplot as plt # Assume an amr2ez.data file is present data = Data('./amr2ez.data') dx = abs(data.xupper-data.xlower) / (data.mx) dy = abs(data.yupper-data.ylower) / (data.my) d = min(dx,dy) mx = int((data.xupper-data.xlower) / d) + 8 my = int((data.yupper-data.ylower) / d) + 8 xlower = data.xlower-d*4.0 ylower = data.ylower-d*4.0 xupper = data.xupper+d*4.0 yupper = data.yupper+d*4.0 bathy_path = tempfile.mkdtemp() grid_size = int(np.ceil(np.sqrt(len(profiles.keys())))) index = 1 plt.figure(1) for (name,profile) in profiles.iteritems(): topo_file = os.path.join(bathy_path,name) # Write out temporary file bathy_func = util.create_topo_func(profile,verbose=verbose) N = len(profile) factor = 4 if topo_type == 1: tt.topo1writer(topo_file,bathy_func,xlower,xupper,ylower,yupper, factor*mx,factor*my) elif topo_type == 2: tt.topo2writer(topo_file,bathy_func,xlower,xupper,ylower,yupper, factor*mx,factor*my) else: raise Exception("Invalid topo_type %s." % topo_type) # Read it back in (X,Y,Z) = tt.topofile2griddata(topo_file,topotype=topo_type) slice_index = int(X.shape[0] / 2.0) x = X[slice_index,:] b = Z[slice_index,:] limits = [np.min(x),np.max(x),np.min(b)*1.05,np.max(b)*1.05] wet_index = np.nonzero(b < 0.0) plt.subplot(grid_size,grid_size,index) plt.hold(True) plt.plot(x,b,'k',linewidth=2) plt.plot(x[wet_index],np.zeros(x[wet_index].shape),'b') plt.axis(limits) plt.title(name) plt.xlabel('km') plt.ylabel('m') locs,labels = plt.xticks() labels = locs/1e3 plt.xticks(locs,labels) plt.hold(False) index = index + 1 plt.show() shutil.rmtree(bathy_path)