Exemplo n.º 1
0
def main():
    """Go Main"""
    nt = NetworkTable(['AWOS', 'IA_ASOS'])
    pgconn = psycopg2.connect(database='mos', host='localhost', user='******',
                              port=5555)
    df = read_sql("""
    select station, avg(pwater) from model_gridpoint where
    model = 'NAM' and extract(hour from runtime at time zone 'UTC') = 0
    and pwater > 0 and pwater < 100 and
    extract(month from runtime) between 4 and 9 and ftime = runtime
    GROUP by station ORDER by avg
    """, pgconn, index_col='station')
    df['lat'] = None
    df['lon'] = None
    df['pwater'] = distance(df['avg'].values, 'MM').value('IN')
    for station in df.index.values:
        df.at[station, 'lat'] = nt.sts[station[1:]]['lat']
        df.at[station, 'lon'] = nt.sts[station[1:]]['lon']

    mp = MapPlot(title=('00z Analysis NAM Warm-Season Average '
                        'Precipitable Water [in]'),
                 subtitle=("based on grid point samples "
                           "from 2004-2017 (April-September)"))
    cmap = plt.get_cmap("plasma_r")
    cmap.set_under('white')
    cmap.set_over('black')
    mp.contourf(df['lon'], df['lat'], df['pwater'],
                np.arange(0.94, 1.13, 0.03), cmap=cmap,
                units='inch')
    mp.drawcounties()
    mp.drawcities()
    mp.postprocess(filename='170901.png')
    mp.close()
Exemplo n.º 2
0
def plot_maxmin(ts, field):
    """Generate our plot."""
    nc = ncopen(ts.strftime("/mesonet/data/ndfd/%Y%m%d%H_ndfd.nc"))
    if field == 'high_tmpk':
        data = np.max(nc.variables[field][:], 0)
    elif field == 'low_tmpk':
        data = np.min(nc.variables[field][:], 0)
    data = masked_array(data, units.degK).to(units.degF).m

    subtitle = ("Based on National Digital Forecast Database (NDFD) "
                "00 UTC Forecast made %s") % (ts.strftime("%-d %b %Y"), )
    mp = MapPlot(title='NWS NDFD 7 Day (%s through %s) %s Temperature' % (
        ts.strftime("%-d %b"),
        (ts + datetime.timedelta(days=6)).strftime("%-d %b"),
        'Maximum' if field == 'high_tmpk' else 'Minimum',
    ),
                 subtitle=subtitle,
                 sector='iailin')
    mp.pcolormesh(nc.variables['lon'][:],
                  nc.variables['lat'][:],
                  data,
                  np.arange(10, 121, 10),
                  cmap=plt.get_cmap('jet'),
                  units='Degrees F')
    mp.drawcounties()
    pqstr = (
        "data c %s summary/cb_ndfd_7day_%s.png summary/cb_ndfd_7day_%s.png "
        "png") % (ts.strftime("%Y%m%d%H%M"), "max" if field == 'high_tmpk' else
                  'min', "max" if field == 'high_tmpk' else 'min')
    mp.postprocess(pqstr=pqstr)
    mp.close()
    nc.close()
Exemplo n.º 3
0
def plot_gdd(ts):
    """Generate our plot."""
    nc = ncopen(ts.strftime("/mesonet/data/ndfd/%Y%m%d%H_ndfd.nc"))
    # compute our daily GDDs
    gddtot = np.zeros(np.shape(nc.variables["lon"][:]))
    for i in range(7):
        gddtot += gdd(
            temperature(nc.variables["high_tmpk"][i, :, :], "K"),
            temperature(nc.variables["low_tmpk"][i, :, :], "K"),
        )
    cnc = ncopen("/mesonet/data/ndfd/ndfd_dailyc.nc")
    offset = daily_offset(ts)
    avggdd = np.sum(cnc.variables["gdd50"][offset:offset + 7], 0)
    data = gddtot - np.where(avggdd < 1, 1, avggdd)

    subtitle = ("Based on National Digital Forecast Database (NDFD) "
                "00 UTC Forecast made %s") % (ts.strftime("%-d %b %Y"), )
    mp = MapPlot(
        title="NWS NDFD 7 Day (%s through %s) GDD50 Departure from Avg" % (
            ts.strftime("%-d %b"),
            (ts + datetime.timedelta(days=6)).strftime("%-d %b"),
        ),
        subtitle=subtitle,
        sector="iailin",
    )
    mp.pcolormesh(
        nc.variables["lon"][:],
        nc.variables["lat"][:],
        data,
        np.arange(-80, 81, 20),
        cmap=plt.get_cmap("RdBu_r"),
        units=r"$^\circ$F",
        spacing="proportional",
    )
    mp.drawcounties()
    pqstr = (
        "data c %s summary/cb_ndfd_7day_gdd.png summary/cb_ndfd_7day_gdd.png "
        "png") % (ts.strftime("%Y%m%d%H%M"), )
    mp.postprocess(pqstr=pqstr)
    mp.close()
    nc.close()
Exemplo n.º 4
0
def main():
    """Go Main Go"""
    data = get_data()
    mp = MapPlot(sector='midwest',
                 title='8 July 2018 USDA NASS Corn Progress Percent Silking',
                 subtitle=('Top value is 2018 percentage, bottom value is '
                           'departure from 2008-2017 avg'))
    data2 = {}
    labels = {}
    for state in data:
        val = data[state]['d2017'] - data[state]['avg']
        data2[state] = val
        labels[state.encode('utf-8')] = "%i%%\n%s%.1f%%" % (data[state]['d2017'],
                                          "+" if val > 0 else "", val)

    print(labels)
    levels = range(-40, 41, 10)
    mp.fill_states(data2, ilabel=True, labels=labels, bins=levels,
                   cmap=plt.get_cmap('RdBu_r'), units='Absolute %',
                   labelfontsize=16)
    mp.postprocess(filename='test.png')
    mp.close()
Exemplo n.º 5
0
def makeplot(ts, routes='ac'):
    """
    Generate two plots for a given time GMT
    """
    pgconn = get_dbconn('smos', user='******')
    df = read_sql("""
    WITH obs as (
        SELECT grid_idx, avg(soil_moisture) * 100. as sm,
        avg(optical_depth) as od from data where valid BETWEEN %s and %s
        GROUP by grid_idx)

    SELECT ST_x(geom) as lon, ST_y(geom) as lat,
    CASE WHEN sm is Null THEN -1 ELSE sm END as sm,
    CASE WHEN od is Null THEN -1 ELSE od END as od
    from obs o JOIN grid g ON (o.grid_idx = g.idx)
    """, pgconn,  params=(ts - datetime.timedelta(hours=6),
                          ts + datetime.timedelta(hours=6)), index_col=None)

    if df.empty:
        print(("Did not find SMOS data for: %s-%s"
               ) % (ts - datetime.timedelta(hours=6),
                    ts + datetime.timedelta(hours=6)))
        return

    for sector in ['midwest', 'iowa']:
        clevs = np.arange(0, 71, 5)
        mp = MapPlot(sector=sector, axisbg='white',
                     title='SMOS Satellite: Soil Moisture (0-5cm)',
                     subtitle="Satelite passes around %s UTC" % (
                                                 ts.strftime("%d %B %Y %H"),))
        if sector == 'iowa':
            mp.drawcounties()
        cmap = cm.get_cmap('jet_r')
        cmap.set_under('#EEEEEE')
        cmap.set_over("k")
        mp.hexbin(df['lon'].values, df['lat'].values, df['sm'], clevs,
                  units='%', cmap=cmap)
        pqstr = "plot %s %s00 smos_%s_sm%s.png smos_%s_sm%s.png png" % (
                    routes, ts.strftime("%Y%m%d%H"), sector, ts.strftime("%H"),
                    sector, ts.strftime("%H"))
        mp.postprocess(pqstr=pqstr)
        mp.close()

    for sector in ['midwest', 'iowa']:
        clevs = np.arange(0, 1.001, 0.05)
        mp = MapPlot(sector=sector, axisbg='white',
                     title=('SMOS Satellite: Land Cover Optical Depth '
                            '(microwave L-band)'),
                     subtitle="Satelite passes around %s UTC" % (
                                                 ts.strftime("%d %B %Y %H"),))
        if sector == 'iowa':
            mp.drawcounties()
        cmap = cm.get_cmap('jet')
        cmap.set_under('#EEEEEE')
        cmap.set_over("k")
        mp.hexbin(df['lon'].values, df['lat'].values, df['od'], clevs,
                  cmap=cmap)
        pqstr = "plot %s %s00 smos_%s_od%s.png smos_%s_od%s.png png" % (
                    routes, ts.strftime("%Y%m%d%H"), sector, ts.strftime("%H"),
                    sector, ts.strftime("%H"))
        mp.postprocess(pqstr=pqstr)
        mp.close()
Exemplo n.º 6
0
def makeplot(ts, routes="ac"):
    """
    Generate two plots for a given time GMT
    """
    pgconn = get_dbconn("smos", user="******")
    df = read_sql(
        """
    WITH obs as (
        SELECT grid_idx, avg(soil_moisture) * 100. as sm,
        avg(optical_depth) as od from data where valid BETWEEN %s and %s
        GROUP by grid_idx)

    SELECT ST_x(geom) as lon, ST_y(geom) as lat,
    CASE WHEN sm is Null THEN -1 ELSE sm END as sm,
    CASE WHEN od is Null THEN -1 ELSE od END as od
    from obs o JOIN grid g ON (o.grid_idx = g.idx)
    """,
        pgconn,
        params=(
            ts - datetime.timedelta(hours=6),
            ts + datetime.timedelta(hours=6),
        ),
        index_col=None,
    )

    if df.empty:
        LOG.info(
            "Did not find SMOS data for: %s-%s",
            ts - datetime.timedelta(hours=6),
            ts + datetime.timedelta(hours=6),
        )
        return

    for sector in ["midwest", "iowa"]:
        clevs = np.arange(0, 71, 5)
        mp = MapPlot(
            sector=sector,
            axisbg="white",
            title="SMOS Satellite: Soil Moisture (0-5cm)",
            subtitle="Satelite passes around %s UTC" %
            (ts.strftime("%d %B %Y %H"), ),
        )
        if sector == "iowa":
            mp.drawcounties()
        cmap = get_cmap("jet_r")
        cmap.set_under("#EEEEEE")
        cmap.set_over("k")
        mp.hexbin(
            df["lon"].values,
            df["lat"].values,
            df["sm"],
            clevs,
            units="%",
            cmap=cmap,
        )
        pqstr = "plot %s %s00 smos_%s_sm%s.png smos_%s_sm%s.png png" % (
            routes,
            ts.strftime("%Y%m%d%H"),
            sector,
            ts.strftime("%H"),
            sector,
            ts.strftime("%H"),
        )
        mp.postprocess(pqstr=pqstr)
        mp.close()

    for sector in ["midwest", "iowa"]:
        clevs = np.arange(0, 1.001, 0.05)
        mp = MapPlot(
            sector=sector,
            axisbg="white",
            title=("SMOS Satellite: Land Cover Optical Depth "
                   "(microwave L-band)"),
            subtitle="Satelite passes around %s UTC" %
            (ts.strftime("%d %B %Y %H"), ),
        )
        if sector == "iowa":
            mp.drawcounties()
        cmap = get_cmap("jet")
        cmap.set_under("#EEEEEE")
        cmap.set_over("k")
        mp.hexbin(df["lon"].values,
                  df["lat"].values,
                  df["od"],
                  clevs,
                  cmap=cmap)
        pqstr = "plot %s %s00 smos_%s_od%s.png smos_%s_od%s.png png" % (
            routes,
            ts.strftime("%Y%m%d%H"),
            sector,
            ts.strftime("%H"),
            sector,
            ts.strftime("%H"),
        )
        mp.postprocess(pqstr=pqstr)
        mp.close()