(parser.parse(d) + timedelta(days=1)).strftime("%m%d"), parser.parse(d).strftime("%m%d")) fnscint = folder + 'ix_{}_{}T0000-{}T0000_reduced{}_d1_r2_yaml_30el_1s_350km.h5'.format( parser.parse(d).year, parser.parse(d).strftime("%m%d"), (parser.parse(d) + timedelta(days=1)).strftime("%m%d"), parser.parse(d).strftime("%m%d")) tlim = [parser.parse(d), parser.parse(d) + timedelta(hours=10)] Xt = -80 Yt = [10, 60] dtec_clim = [-0.1, 0.1] TEC = gpstec.readFromHDF(fn) xgrid = TEC['xgrid'] ygrid = TEC['ygrid'] im = TEC['tecim'] D = dm.keogram(time=TEC['time'], xgrid=xgrid, ygrid=ygrid, im=im, tlim=tlim, Xt=Xt, Yt=Yt, Xn=2, fillPixel=2) fig = plt.figure(figsize=[10, 5])
assert os.path.isfile(TECFN), TECFN if scintfn is None: if platform.system() == 'Windows': scint_root = root + '\\hdf\\{}\\'.format(datedt[0].year) else: scint_root = root + '/hdf/' scint_fn_list = sorted( glob.glob(scint_root + "ix_{}_{}T*.h5".format( datedt[0].year, datedt[0].strftime("%m%d")))) assert len(scint_fn_list) > 0 scintfn = scint_fn_list[0] assert os.path.isfile(scintfn) #TEC TEC = gpstec.readFromHDF(TECFN) tectime = TEC['time'] xgrid = TEC['xgrid'] ygrid = TEC['ygrid'] #SCINT DATA scintdata = h5py.File(scintfn, 'r') scint_time = scintdata['data/time'][:] scint_dt = np.array([datetime.utcfromtimestamp(t) for t in scint_time]) if tlim is None: tlim = [parser.parse(date), parser.parse(date) + timedelta(days=1)] if isinstance(tlim[0], str): dirnametime = scint_dt[0].strftime('%Y%m%d') if dirnametime != parser.parse(tlim[0]).strftime('%Y%m%d'): t0 = parser.parse(dirnametime + 'T' + tlim[0]) t1 = parser.parse(dirnametime + 'T' + tlim[1])
def main(date='', root=None, scintfn=None, clim=None, tlim=None, trange=None, odir=None, latlim=None, lonlim=None, terminator=False, nightshade=False, cmap='gray', SAVE=1, resolution=5): DPI = 150 datedt = [parser.parse(date), parser.parse(date) + timedelta(days=1)] if trange is None: trange = resolution / 2 if latlim is None: latlim = [-10, 75] if lonlim is None: lonlim = [-160, -50] if clim is None: tecclim = [0, 20] else: tecclim = clim if root is None: if platform.system() == 'Windows': root = 'G:\\My Drive\\scintillation_data\\' else: root = '/home/smrak/Documents/scintillation/' if odir is None: if platform.system() == 'Windows': odir = root + '{}\\{}-{}-{}\\'.format( parser.parse(date).strftime("%Y%m%d"), cmap, tecclim[0], tecclim[1]) else: odir = root + '/maps/{}/{}-{}-{}/'.format( parser.parse(date).strftime("%Y%m%d"), cmap, tecclim[0], tecclim[1]) if platform.system() == 'Windows': TECFN = root + 'tid\\{}\\conv_{}T0000-{}T0000.h5'.format( parser.parse(date).strftime("%Y%m%d"), datedt[0].strftime("%Y%m%d"), datedt[1].strftime("%Y%m%d")) else: TECFN = '/media/smrak/figures/gpstec/{}/{}/conv_{}T0000-{}T0000.h5'.format( parser.parse(date).year, parser.parse(date).strftime("%m%d"), datedt[0].strftime("%Y%m%d"), datedt[1].strftime("%Y%m%d")) assert os.path.isfile(TECFN), TECFN if scintfn is None: if platform.system() == 'Windows': scint_root = root + '\\hdf\\{}\\'.format(datedt[0].year) else: scint_root = root + '/hdf/' scint_fn_list = sorted( glob.glob(scint_root + "ix_{}_{}T*.h5".format( datedt[0].year, datedt[0].strftime("%m%d")))) assert len(scint_fn_list) > 0 scintfn = scint_fn_list[0] assert os.path.isfile(scintfn) #TEC TEC = gpstec.readFromHDF(TECFN) tectime = TEC['time'] xgrid = TEC['xgrid'] ygrid = TEC['ygrid'] #SCINT DATA scintdata = h5py.File(scintfn, 'r') scint_time = scintdata['data/time'][:] scint_dt = np.array([datetime.utcfromtimestamp(t) for t in scint_time]) if tlim is None: tlim = [parser.parse(date), parser.parse(date) + timedelta(days=1)] if isinstance(tlim[0], str): dirnametime = scint_dt[0].strftime('%Y%m%d') if dirnametime != parser.parse(P.tlim[0]).strftime('%Y%m%d'): t0 = parser.parse(dirnametime + 'T' + P.tlim[0]) t1 = parser.parse(dirnametime + 'T' + P.tlim[1]) else: t0 = parser.parse(P.tlim[0]) t1 = parser.parse(P.tlim[0]) tlim = [t0, t1] assert isinstance(tlim[0], datetime) and isinstance(tlim[1], datetime) obstimes = [] t = tlim[0] while t <= tlim[1]: obstimes.append(t) t += timedelta(minutes=resolution) # --------------------------------------------------------------------------- # for ii, it in enumerate(obstimes): # TEC data idt_tec = abs(tectime - it).argmin() if idt_tec < tectime.size - 2: tecim = np.nanmean(TEC['tecim'][idt_tec:idt_tec + 2], axis=0) else: tecim = TEC['tecim'][idt_tec] # Scintillation data # Filter out time range of interest scint_idt = np.zeros(scint_dt.size, dtype=bool) time_range = np.where((scint_dt >= it - timedelta(minutes=trange)) & (scint_dt <= it + timedelta(minutes=trange)))[0] scint_idt[time_range[0]:time_range[-1] + 1] = True # scint_idt[time_range[0]] = True # Read in data ipp_lat = scintdata['data/ipp'][scint_idt, :, :, 0] ipp_lon = scintdata['data/ipp'][scint_idt, :, :, 1] sigma_tec = scintdata['data/sigma_tec'][scint_idt, :, :] snr4 = scintdata['data/snr4'][scint_idt, :, :] roti = scintdata['data/roti'][scint_idt, :, :] # Plot fig = plt.figure(figsize=[15, 6]) ax0 = plt.subplot( 121, projection=ccrs.Stereographic(central_longitude=(sum(lonlim) / 2))) ax1 = plt.subplot( 122, projection=ccrs.Stereographic(central_longitude=(sum(lonlim) / 2))) ax0 = cm.plotCartoMap(latlim=latlim, lonlim=lonlim, projection='stereo', meridians=None, parallels=None, ax=ax0, grid_linewidth=1, states=False, title=it, background_color='grey', apex=True, mlat_levels=[-40, -20, 0, 20, 40, 60, 80, 90], mlat_colors='w', mgrid_width=1, mgrid_style='--', nightshade=nightshade, terminator=terminator, terminator_altkm=350, ter_color='r', ter_style='-', ter_width=2, mlon_cs='mlt', date=it, mlon_levels=np.arange(0, 24.1, 4), mlat_labels=False, mlon_colors='w', mlon_labels=False) ax1 = cm.plotCartoMap(latlim=latlim, lonlim=lonlim, projection='stereo', meridians=None, parallels=None, ax=ax1, grid_linewidth=1, states=False, title=it, background_color='grey', apex=True, mlat_levels=[-40, -20, 0, 20, 40, 60, 80, 90], nightshade=nightshade, terminator=terminator, terminator_altkm=350, ter_color='r', ter_style='-', ter_width=2, mlon_cs='mlt', date=it, mlat_colors='w', mgrid_width=1, mgrid_style='--', mlon_levels=np.arange(0, 24.1, 4), mlat_labels=False, mlon_colors='w', mlon_labels=False) glon_ter, glat_ter = ter.get_terminator(it, alt_km=350) idlon = (glon_ter > -160) & (glon_ter < 0) mlat_ter, mlon_ter = A.convert(glat_ter[idlon], glon_ter[idlon], 'geo', 'apex', height=350) mlat_south = (mlat_ter < 0) glat_ter_conj, glon_ter_conj = A.convert(-mlat_ter[mlat_south], mlon_ter[mlat_south], 'apex', 'geo', height=350) ax0.plot(np.unwrap(glon_ter_conj, 180), glat_ter_conj, '--r', lw=2, transform=ccrs.PlateCarree()) # ------------------------------------------------------------------------- - # ax0.pcolormesh(xgrid, ygrid, tecim.T, cmap=cmap, vmin=tecclim[0], vmax=tecclim[1], transform=ccrs.PlateCarree()) im1 = ax1.pcolormesh( xgrid, ygrid, tecim.T, cmap=cmap, #'nipy_spectral' vmin=tecclim[0], vmax=tecclim[1], transform=ccrs.PlateCarree()) # Scint with amplitude # if np.sum(np.isfinite(sigma_tec)) > 0: if trange >= 1: idf0 = np.isfinite(sigma_tec) if np.sum(np.isfinite(idf0)) == 0: idf0[0] = True imst = ax0.scatter( ipp_lon[idf0], ipp_lat[idf0], c=sigma_tec[idf0], s=30, #(sigma_tec)**2 * 1000000, marker='o', cmap='Reds', alpha=0.8, vmin=0, vmax=0.05, # facecolors = 'none', transform=ccrs.PlateCarree()) idf0 = np.isfinite(snr4) if np.sum(np.isfinite(idf0)) == 0: idf0[0] = True # if np.sum(np.isfinite(snr4)) > 0: imsnr4 = ax0.scatter( ipp_lon[idf0], ipp_lat[idf0], c=snr4[idf0], s=30, #np.square(snr4) * 1000, # linewidth = 0.8, marker='o', alpha=0.8, cmap='Blues', vmin=0, vmax=1.2, # facecolors = 'none', transform=ccrs.PlateCarree()) # Scint locations if np.sum(np.isfinite(roti)) > 0: idf0 = np.isfinite(roti) imroti = ax1.scatter(ipp_lon[idf0], ipp_lat[idf0], c=roti[idf0], s=15, marker='o', alpha=0.8, vmin=0, vmax=0.02, cmap='jet', transform=ccrs.PlateCarree()) posn0 = ax0.get_position() cax = fig.add_axes([posn0.x0, posn0.y0 - 0.03, posn0.width, 0.02]) fig.colorbar(imsnr4, cax=cax, label='$SNR_4$', orientation='horizontal') posn1 = ax1.get_position() cax = fig.add_axes([posn1.x0, posn1.y0 - 0.03, posn1.width, 0.02]) fig.colorbar(imroti, cax=cax, label='ROTI [TECu]', orientation='horizontal') cax = fig.add_axes( [posn1.x0 + posn1.width + 0.01, posn1.y0, 0.02, posn1.height]) fig.colorbar(im1, cax=cax, label='TEC [TECu]') posn0 = ax0.get_position() cax = fig.add_axes( [posn0.x0 + posn0.width + 0.01, posn0.y0, 0.02, posn0.height]) fig.colorbar(imst, cax=cax, label='$\sigma_{TEC}$ [TECu]') else: posn0 = ax0.get_position() cax = fig.add_axes( [posn0.x0 + posn0.width + 0.01, posn0.y0, 0.02, posn0.height]) fig.colorbar(im1, cax=cax, label='$\sigma_{TEC}$ [TECu]') if SAVE: # plt.tight_layout() if not os.path.exists(odir): import subprocess if platform.system() == 'Linux': subprocess.call('mkdir -p "{}"'.format(odir), shell=True, timeout=2) elif platform.system() == 'Windows': subprocess.call('mkdir "{}"'.format(odir), shell=True, timeout=2) print("Plotting {}/{} - {}".format(ii + 1, len(obstimes), it)) fig.savefig(odir + '{}.png'.format(it.strftime('%m%d_%H%M')), dpi=DPI) plt.close(fig) del fig del sigma_tec del snr4
def main(date='', root=None, scintfn=None, clim=None, tlim=None, trange=2.5, odir=None, SAVE=1, resolution=5): if tlim is None: tlim = [parser.parse(date), parser.parse(date) + timedelta(days=1)] if isinstance(tlim[0], str): tlim = [parser.parse(tlim[0]), parser.parse(tlim[1])] assert isinstance(tlim[0], datetime) and isinstance(tlim[1], datetime) obstimes = [] t = tlim[0] while t <= tlim[1]: obstimes.append(t) t += timedelta(minutes=resolution) latlim=[-10, 75] lonlim=[-160, -50] DPI = 100 if clim is None: tecclim = [0, 20] else: tecclim = clim if root is None: if platform.system() == 'Windows': root = os.getcwd() else: root = '/home/smrak/Documents/scintillation/' if odir is None: if platform.system() == 'Windows': odir = root + '\\maps\\{}\\{}\\bw-{}-{}\\'.format(tlim[0].year, parser.parse(date).strftime("%Y%m%d"), tecclim[0], tecclim[1]) TECFN = root + '\\maps\\{}\\{}\\conv_{}T0000-{}T0000.h5'.format(tlim[0].year, parser.parse(date).strftime("%Y%m%d"), tlim[0].strftime("%m%d"), tlim[1].strftime("%m%d")) else: odir = root + '/maps/{}/bw-{}-{}/'.format(parser.parse(date).strftime("%Y%m%d"), tecclim[0], tecclim[1]) TECFN = '/media/smrak/figures/gpstec/{}/{}/conv_{}T0000-{}T0000.h5'.format(parser.parse(date).year, parser.parse(date).strftime("%m%d"), tlim[0].strftime("%Y%m%d"), tlim[1].strftime("%Y%m%d")) if platform.system() == 'Windows': TECFN = root + '\\maps\\{}\\{}\\conv_{}T0000-{}T0000.h5'.format(tlim[0].year, parser.parse(date).strftime("%Y%m%d"), tlim[0].strftime("%m%d"), (tlim[0]+timedelta(days=1)).strftime("%m%d")) else: TECFN = '/media/smrak/figures/gpstec/{}/{}/conv_{}T0000-{}T0000.h5'.format(parser.parse(date).year, parser.parse(date).strftime("%m%d"), tlim[0].strftime("%Y%m%d"), (tlim[0]+timedelta(days=1)).strftime("%Y%m%d")) assert os.path.isfile(TECFN), TECFN if scintfn is None: if platform.system() == 'Windows': scint_root = root + '\\hdf\\{}\\'.format(tlim[0].year) else: scint_root = root + '/hdf/' scint_fn_list = sorted(glob.glob(scint_root + "ix_{}_{}T*.h5".format(tlim[0].year, tlim[0].strftime("%m%d")))) assert len(scint_fn_list) > 0 scintfn = scint_fn_list[0] assert os.path.isfile(scintfn) # --------------------------------------------------------------------------- # for ii, it in enumerate(obstimes): # TEC data D = gpstec.readFromHDF(TECFN) tectime = D['time'] xgrid = D['xgrid'] ygrid = D['ygrid'] idt_tec = abs(tectime - it).argmin() tecim = D['tecim'][idt_tec] # Scintillation data scintdata = h5py.File(scintfn, 'r') scint_time = scintdata['data/time'][:] scint_dt = np.array([datetime.utcfromtimestamp(t) for t in scint_time]) # Filter out time range of interest scint_idt = np.zeros(scint_dt.size, dtype=bool) time_range = np.where( (scint_dt >= it-timedelta(minutes=trange)) & (scint_dt <= it+timedelta(minutes=trange)) )[0] scint_idt[time_range[0]:time_range[-1]+1] = True # scint_idt[time_range[0]] = True # Read in data ipp_lat = scintdata['data/ipp'][scint_idt, :, :, 0] ipp_lon = scintdata['data/ipp'][scint_idt, :, :, 1] sigma_tec = scintdata['data/sigma_tec'][scint_idt, :, :] snr4 = scintdata['data/snr4'][scint_idt, :, :] # Plot fig = plt.figure(figsize=[12,6]) ax0 = plt.subplot(121, projection=ccrs.Stereographic(central_longitude=(sum(lonlim)/2))) ax1 = plt.subplot(122, projection=ccrs.Stereographic(central_longitude=(sum(lonlim)/2))) ax0 = cm.plotCartoMap(latlim=latlim, lonlim=lonlim, projection='stereo', meridians=None, parallels=None, ax=ax0, grid_linewidth=1, states = False, title=it, background_color='grey', apex=True, mlat_levels=[-20,0,20,40,60,80,90], mlat_colors='w', mgrid_width=1, mgrid_style='--', mlon_levels=np.arange(0,361,40), mlat_labels=False, mlon_colors='w', mlon_labels=False) ax1 = cm.plotCartoMap(latlim=latlim, lonlim=lonlim, projection='stereo', meridians=None, parallels=None, ax=ax1, grid_linewidth=1, states = False, title=it, background_color='grey', apex=True, mlat_levels=[-20,0,20,40,60,80,90], mlat_colors='w', mgrid_width=1, mgrid_style='--', mlon_levels=np.arange(0,361,40), mlat_labels=False, mlon_colors='w', mlon_labels=False) # ------------------------------------------------------------------------- - # im0 = ax0.pcolormesh(xgrid, ygrid, tecim.T, cmap='gray', vmin = tecclim[0], vmax = tecclim[1], transform=ccrs.PlateCarree()) im1 = ax1.pcolormesh(xgrid, ygrid, tecim.T, cmap='gray', #'nipy_spectral' vmin = tecclim[0], vmax = tecclim[1], transform=ccrs.PlateCarree()) # Scint with amplitude if np.sum(np.isfinite(sigma_tec)) > 0: ax0.scatter(ipp_lon, ipp_lat, c = 'r', s = (sigma_tec)**2 * 1000000, marker = '+', alpha=0.2, # facecolors = 'none', transform = ccrs.PlateCarree()) if np.sum(np.isfinite(snr4)) > 0: ax0.scatter(ipp_lon, ipp_lat, c = 'b', s = np.square(snr4) * 1000, linewidth = 0.8, marker = 'x', alpha = 1, # facecolors = 'none', transform = ccrs.PlateCarree()) # Scint locations if np.sum(np.isfinite(sigma_tec)) > 0: maskst = np.isfinite(sigma_tec) ax1.scatter(ipp_lon[maskst], ipp_lat[maskst], c = 'r', s = 2, marker = '.', alpha=0.5, transform = ccrs.PlateCarree()) if np.sum(np.isfinite(snr4)) > 0: masks4 = np.isfinite(snr4) ax1.scatter(ipp_lon[masks4], ipp_lat[masks4], c = 'b', s = 10, lw = 0.2, marker = 'x', alpha = 0.5, transform = ccrs.PlateCarree()) posn = ax1.get_position() cax = fig.add_axes([posn.x0+posn.width+0.01, posn.y0, 0.02, posn.height]) fig.colorbar(im1, cax=cax, label='TEC [TECu]') if SAVE: if not os.path.exists(odir): import subprocess if platform.system() == 'Linux': subprocess.call('mkdir -p "{}"'.format(odir), shell=True, timeout=2) elif platform.system() == 'Windows': subprocess.call('mkdir "{}"'.format(odir), shell=True, timeout=2) print ("Plotting {}/{} - {}".format(ii+1, len(obstimes), it)) fig.savefig(odir+'{}.png'.format(it.strftime('%m%d_%H%M')), dpi=DPI) plt.close(fig) del fig del sigma_tec del snr4
bary = np.einsum('njk,nk->nj', temp[:, :d, :], delta) return vertices, np.hstack((bary, 1 - bary.sum(axis=1, keepdims=True))) def _interpolate(values, vtx, wts, fill_value=np.nan): ret = np.einsum('nj,nj->n', np.take(values, vtx), wts) ret[np.any(wts < 0, axis=1)] = fill_value return ret tlim = [datetime(2016,5,8,0), datetime(2016,5,8,5)] lonlim = [-140, -55] latlim = [0, 60] res = 0.3 fnhdf = 'G:\\My Drive\\scintillation_data\\tid\\20160508\\conv_20160508T0000-20160509T0000.h5' D = gpstec.readFromHDF(fnhdf) idt = (D['time'] >= tlim[0]) & (D['time'] <= tlim[1]) idx = (D['xgrid'] >= lonlim[0]) & (D['xgrid'] <= lonlim[1]) idy = (D['ygrid'] >= latlim[0]) & (D['ygrid'] <= latlim[1]) xgt, ygt = np.meshgrid(np.arange(D['xgrid'][idx][0], D['xgrid'][idx][-1]+0.1, 1), np.arange(D['ygrid'][idy][0], D['ygrid'][idy][-1]+0.1, 1)) T0t = D['tecim'][idt] T0x = T0t[:, idx, :] T0 = T0x[:, :, idy] xg, yg = np.meshgrid(np.arange(D['xgrid'][idx][0], D['xgrid'][idx][-1]+0.1, res), np.arange(D['ygrid'][idy][0], D['ygrid'][idy][-1]+0.1, res)) z = T0[0].T
def plot(fnhdf: str = None, show: bool = False, odir: str = None, cfg: str = None, clim: list = None, mode: str = None): C0 = clim fnhdf = os.path.expanduser(fnhdf.strip()) assert fnhdf is not None assert os.path.splitext(fnhdf)[1] in ['.h5', '.hdf5'] # Converted file D = gpstec.readFromHDF(fnhdf) if cfg is None: folder = os.path.expanduser(os.path.join(os.getcwd(), 'map')) mcfg = sorted(glob(os.path.join(folder, '*.yaml')))[0] else: assert os.path.splitext(cfg)[1] in ['.yaml', 'yml'] mcfg = cfg # Map mst = yaml.load(open(mcfg, 'r')) projection = mst.get('projection') cmap = mst.get('cmap') nightshade = mst.get('nightshade') latlim = mst.get('latlim') lonlim = mst.get('lonlim') paralim = mst.get('parallels') meridilim = mst.get('meridians') parallels = np.arange(paralim[0], paralim[1], paralim[2]) meridians = np.arange(meridilim[0], meridilim[1], meridilim[2]) if mode is None: mode = mst.get('mode') if mst.get('mode') is not None else 'lin' if isinstance(mode, str): mode = [mode] colorbar = mst.get('colorbar') cbar_label = mst.get('cbar_label') if mst.get( 'cbar_label') is not None else 'TEC [TECu]' if clim is None: clim = mst.get('clim') if clim is None: vmax = 3 * _round(np.nanmedian(D['tecim']), base=5) vmin = 0 clim = [vmin, vmax] else: vmax = float(clim[1]) vmin = float(clim[0]) clim = [vmin, vmax] figsize = mst.get('figsize') if mst.get('figsize') is not None else [12, 8] background_color = mst.get('background_color') if mst.get( 'background_color') is not None else 'grey' grid_color = mst.get('grid_color') if mst.get( 'grid_color') is not None else 'white' grid_linewidth = mst.get('grid_linewidth') if mst.get( 'grid_linewidth') is not None else 1 grid_linestyle = mst.get('grid_linestyle') if mst.get( 'grid_linestyle') is not None else '--' dpi = mst.get('dpi') if mst.get('dpi') is not None else 50 # Plot for mode in mode: if mode == 'log': clim[1] = np.log10(vmax) else: clim[1] = vmax for i in range(D['time'].shape[0]): z = np.log10(D['tecim'][i]) if mode == 'log' else D['tecim'][i] fig, ax = gm.plotCartoMap(figsize=figsize, projection=projection, title=D['time'][i], latlim=latlim, lonlim=lonlim, meridians=meridians, parallels=parallels, background_color=background_color, grid_color=grid_color, grid_linewidth=grid_linewidth, grid_linestyle=grid_linestyle, figure=True, nightshade=nightshade, ns_dt=D['time'][i]) im = plt.pcolormesh(D['xgrid'], D['ygrid'], z.T, cmap=cmap, transform=ccrs.PlateCarree()) plt.clim(clim) if colorbar: cax = fig.add_axes([0, 0, 0.1, 0.1]) plt.colorbar(im, cax=cax, label=cbar_label) axp = fig.gca() posn = ax.get_position() axp.set_position( [posn.x0 + posn.width + 0.01, posn.y0, 0.02, posn.height]) fig.canvas.draw() if show: plt.show() else: if odir is None: odir = os.path.split(fnhdf)[0] assert os.path.isdir(odir) if C0 is not None: svdir = mode + str(int(clim[0])) + '-' + str(int(clim[1])) else: svdir = mode figdir = os.path.expanduser(os.path.join(odir, svdir)) if not os.path.exists(figdir): print('Creating a new directory: ', figdir) subprocess.call('mkdir -p {}'.format(figdir), shell=True, timeout=5) fn = D['time'][i].strftime('%m%d_%H%M') figname = fn + str('.png') plt.savefig(os.path.join(figdir, figname), dpi=dpi) plt.close(fig=fig)
def plot(fnhdf: str = None, odir: str = None, cfg: str = None, clim: list = None, mode: str = None, average: int = None, cmap=None, projection=None, lonlim=None, latlim=None, terminator=None): C0 = clim fnhdf = os.path.expanduser(fnhdf.strip()) assert fnhdf is not None assert os.path.splitext(fnhdf)[1] in ['.h5', '.hdf5'] # Converted file D = gpstec.readFromHDF(fnhdf) if cfg is None: folder = os.path.expanduser(os.path.join(os.getcwd(), 'map')) mcfg = sorted(glob(os.path.join(folder, '*.yaml')))[0] else: assert os.path.splitext(cfg)[1] in ['.yaml', 'yml'] mcfg = cfg # Map mst = yaml.load(open(mcfg, 'r')) if projection is None: projection = mst.get('projection') if cmap is None: cmap = mst.get('cmap') if lonlim is None: lonlim = mst.get('lonlim') if latlim is None: latlim = mst.get('latlim') try: nightshade = mst.get('nightshade') except: pass try: paralim = mst.get('parallels') meridilim = mst.get('meridians') parallels = np.arange(paralim[0], paralim[1], paralim[2]) meridians = np.arange(meridilim[0], meridilim[1], meridilim[2]) except: parallels = [] meridians = [] try: apex = True mlatlim = mst.get('mlat') mltlim = mst.get('mlt') mlat_levels = np.arange(mlatlim[0], mlatlim[1] + .1, mlatlim[2]) mlon_levels = np.arange(mltlim[0], mltlim[1] + .1, mltlim[2]) except: apex = False mlat_levels = None mlon_levels = None if mode is None: mode = 'lin' if isinstance(mode, str): mode = [mode] colorbar = mst.get('colorbar') cbar_label = mst.get('cbar_label') if mst.get( 'cbar_label') is not None else 'TEC [TECu]' if clim is None: clim = mst.get('clim') if clim is None: vmax = 3 * _round(np.nanmedian(D['tecim']), base=5) vmin = 0 clim = [vmin, vmax] else: vmax = float(clim[1]) vmin = float(clim[0]) clim = [vmin, vmax] figsize = mst.get('figsize') if mst.get('figsize') is not None else [12, 8] background_color = mst.get('background_color') if mst.get( 'background_color') is not None else 'grey' grid_color = mst.get('grid_color') if mst.get( 'grid_color') is not None else 'white' grid_linewidth = mst.get('grid_linewidth') if mst.get( 'grid_linewidth') is not None else 1 grid_linestyle = mst.get('grid_linestyle') if mst.get( 'grid_linestyle') is not None else '--' dpi = int(mst.get('DPI')) if mst.get('DPI') is not None else 50 # Plot for mode in mode: if mode == 'log': clim[1] = np.log10(vmax) else: clim[1] = vmax iterate = np.arange(0, D['time'].size, average) for i in iterate: #range(D['time'].shape[0]): t0 = D['time'][i] z = np.log10(np.nanmean(D['tecim'][i:i + average], axis=0)) if mode == 'log' else np.nanmean( D['tecim'][i:i + average], axis=0) fig, ax = gm.plotCartoMap( latlim=latlim, lonlim=lonlim, projection='merc', #lon0 = -90,#glons[idmidnight], title=t0, #lat0 = 40, meridians=None, parallels=None, figsize=figsize, background_color='gray', border_color='k', states=0, apex=True, mlat_labels=0, mlon_labels=0, mlat_levels=mlat_levels, mlon_levels=mlon_levels, date=t0, mlon_colors='w', mlat_colors='w', mlon_cs='mlt', terminator=True, ter_color='r', terminator_altkm=350) print("Plotting {}".format(D['time'][i])) im = plt.pcolormesh(D['xgrid'], D['ygrid'], z.T, cmap=cmap, transform=ccrs.PlateCarree()) plt.clim(clim) if colorbar: posn = ax.get_position() cax = fig.add_axes( [posn.x0 + posn.width + 0.01, posn.y0, 0.02, posn.height]) fig.colorbar(im, cax=cax, label='TEC [TECu]') if odir is None: odir = os.path.join( os.path.split(fnhdf)[0], D['time'][i].strftime("%Y%m%d")) svdir = projection + '_' + mode + '_' + str(int( clim[0])) + '-' + str(int(clim[1])) figdir = os.path.expanduser(os.path.join(odir, svdir)) if not os.path.exists(figdir): print('Creating a new directory: ', figdir) if platform.system == 'Linux': subprocess.call('mkdir -p {}'.format(figdir), shell=True, timeout=5) else: subprocess.call('mkdir "{}"'.format(figdir), shell=True, timeout=5) fn = D['time'][i].strftime('%m%d_%H%M') figname = fn + str('.png') plt.savefig(os.path.join(figdir, figname), dpi=dpi) plt.close(fig=fig)