Esempio n. 1
0
def quick_map(da, dims=["lon", "lat"], redim_range=None, **user_options):
    options = dict(
        cmap="viridis",
        colorbar=True,
        fig_size=300,
        projection=crs.Robinson(central_longitude=180),
    )
    options.update(user_options)
    name = da.name
    dataset = gv.Dataset(da)
    image = dataset.to(gv.Image, dims, dynamic=True).options(**options)
    if redim_range is not None:
        image = image.redim.range(**{name: redim_range})

    return gv.output(image * gf.coastline(), backend="matplotlib")
Esempio n. 2
0
 def intervention_update(event):
     global curr_var, DATA_DICT, control_data, curr_intervention, gv_geo_plot, min_range, max_range
     curr_intervention = event.item
     curr_ds = DATA_DICT[event.item]
     dataset = gv.Dataset(curr_ds)
     gv_geo_plot = dataset.to(gv.Image, ['lon', 'lat'], curr_var, dynamic=True).opts(title = '{} Intervention, {} data'.format(curr_intervention, curr_var), cmap=CMAP_DICT[curr_var], colorbar=True, backend='bokeh', projection = crs.PlateCarree()) *gf.coastline() * gf.borders() * stateBasemap.opts(fill_alpha=0,line_width=0.5)        
     gv_geo_plot = gv_geo_plot.redim(**{curr_var:hv.Dimension(curr_var, range=(min_range, max_range))})
     intervention_stream.event(intervention=event.item)
Esempio n. 3
0
    def variable_update(event):
        global path, fram_data, curr_var, min_range, max_range, control_path, control_data, global_data, global_path, gv_geo_plot, curr_dataset, curr_intervention, DATA_DICT
        path = './iceClinic/data/f09_g16.B.cobalt.FRAM.MAY.{}.200005-208106.nc'.format(event.item)
        control_path = './iceClinic/data/f09_g16.B.cobalt.CONTROL.MAY.{}.200005-208106.nc'.format(event.item)
        global_path = './iceClinic/data/f09_g16.B.cobalt.GLOBAL.MAY.{}.200005-208106.nc'.format(event.item)
        curr_var = event.item
        fram_data = xr.open_dataset(path)
        control_data = xr.open_dataset(control_path)
        global_data = xr.open_dataset(global_path)
        DATA_DICT = {'CONTROL': control_data, 'FRAM' : fram_data, 'GLOBAL' : global_data}
        curr_dataset = DATA_DICT[curr_intervention]
       
        dataset = gv.Dataset(curr_dataset)
        stateBasemap = gv.Feature(feature.STATES)
        gv_geo_plot = dataset.to(gv.Image, ['lon', 'lat'], curr_var, dynamic=True).opts(title = '{} Intervention, {} data'.format(curr_intervention, curr_var), cmap=CMAP_DICT[curr_var], colorbar=True, backend='bokeh', projection = crs.PlateCarree()) *gf.coastline() * gf.borders() * stateBasemap.opts(fill_alpha=0,line_width=0.5)

        #control_min_range, control_max_range = getMinMax(control_data, curr_var)
        #print(control_min_range, control_max_range)
        fram_min_range, fram_max_range = getMinMax(fram_data, curr_var)
        global_min_range, global_max_range = getMinMax(global_data, curr_var)
        min_range = min(fram_min_range, global_min_range)
        max_range = max(fram_max_range,global_max_range)
        
        gv_geo_plot = gv_geo_plot.redim(**{curr_var:hv.Dimension(curr_var, range=(min_range, max_range))})
        var_stream.event(var=event.item)
Esempio n. 4
0
              "FWI" : "Fosberg Fire Weather Index"}
    return plot.opts(width=500, framewise=True, 
                     title='{} timeseries data'.format(curr_var), ylabel=labels[var])

stream = hv.streams.Stream.define('time_step', time_step=cftime.DatetimeNoLeap(2000, 6, 1))()
var_stream = hv.streams.Stream.define('Var', var="TS")()
lat_stream = hv.streams.Stream.define('Lat', lat=45)()
lon_stream = hv.streams.Stream.define('Lon', lon=122)()
intervention_stream = hv.streams.Stream.define('intervention', intervention="FRAM")()

dmap = hv.DynamicMap(geo_plot, streams=[stream, var_stream, intervention_stream]).opts(width=600)
dataset = gv.Dataset(curr_dataset)
stateBasemap = gv.Feature(feature.STATES)
gv_geo_plot = dataset.to(gv.Image, ['lon', 'lat'], 'TS', dynamic=True).opts(
    title = '{} Intervention, {} data'.format(curr_intervention, curr_var),
    cmap='coolwarm', colorbar=True, backend='bokeh', projection = crs.PlateCarree()) * gf.coastline() * gf.borders() * stateBasemap.opts(fill_alpha=0,line_width=0.5)
gv_geo_plot = gv_geo_plot.redim(TS=hv.Dimension(curr_var, range=(min_range, max_range)))

dmap_time_series = hv.DynamicMap(timeseries, streams=[var_stream, lat_stream, lon_stream]).opts(width=500, framewise=True)
#Main function that processes incoming events and defines the current layout
def modify_doc(doc):
    # Bokeh renderers that hold current viz as its state
    hvplot = renderer.get_plot(dmap, doc)
    timeseriesPlot = renderer.get_plot(dmap_time_series, doc)

    def animate_update():
        year = slider.value + 1
        if year > end:
            year = start
        slider.value = year
Esempio n. 5
0
import xarray as xr
import geoviews as gv
import geoviews.feature as gf
import xarray as xr
from cartopy import crs

gv.extension('bokeh', 'matplotlib')

# prepare some data

xarr = xr.open_dataset(
    '/Users/doutriaux1/miniconda3/envs/jupyter-vcdat/share/cdat/sample_data/clt.nc',
    decode_times=False).load()
xarr = xarr["clt"][0]
kdims = ['longitude', 'latitude']
vdims = ['clt']
dataset = gv.Dataset(xarr, kdims=kdims, vdims=vdims)
# ensemble = dataset.to(gv.Image, ['longitude', 'latitude'])

# gv.output(ensemble.opts(cmap='viridis', colorbar=True, fig_size=200, backend='matplotlib') * gf.coastline(),
#           backend='matplotlib')
for backend in ["bokeh", "matplotlib"]:
    print("RENDERING WITH:", backend)
    img = gv.Image(dataset).opts(cmap="viridis",
                                 backend=backend) * gf.coastline()
    gv.save(img,
            filename="plot_clt_geoviews_{}.png".format(backend),
            backend=backend)
Esempio n. 6
0

def load_image(time, p):
    print("time %s, p %s" % (time, p))
    data = dataset[p][3]
    if not sea_data:
        data = data[0]
    img = gv.operation.project_image(gv.Image(data))

    return img


# image_stack = hv.DynamicMap(load_image,  kdims=['time', 'p'], streams=[Param()])
#plot = regrid(image_stack)# * gf.coastline(plot=dict(scale='10m')) #.redim.range(time=(0,3))
gf.coastline.set_param("extents", (90, -18, 154, 30))
coastline = gf.coastline(plot=dict(scale='50m'))
#regridded_map = regrid(load_image(0, params[0]))
data_map = hv.DynamicMap(load_image, streams=[Param()])
regridded_map = regrid(data_map)

print("coastline: %s, regridded_map %s" % (coastline, regridded_map))
plot = regridded_map * coastline
print("plot: %s" % (plot))
print(plot.id)


def select_param(param=params[0]):
    data_map.event(p=param)


def select_param_handler(index):
Esempio n. 7
0
    def gen_plot():
        infos = dsTable.get_plot_infos()
        if infos is None:
            return
        ds, var_name, shape = infos
        ds_uri = ds["id"]
        timestamp = ds["data"]["time"][0]
        file_name = ds_uri.split("/")[-1]
        kdims = shape
        vdims = [var_name]

        lon_key, lat_key = None, None
        for key in dsTable.meta_variables:
            entry = dsTable.meta_variables[key]
            if "attributes" not in entry or "standard_name" not in entry[
                    "attributes"]:
                continue
            if entry["attributes"]["standard_name"]["value"] == "longitude":
                lon_key = key

            if entry["attributes"]["standard_name"]["value"] == "latitude":
                lat_key = key

        if lat_key not in kdims or lon_key not in kdims:
            log("'lat' and 'lon' are required dimensions!")
            return
        full_url = index["opendap_url"] + ds_uri
        log("Opening dataset: " + full_url)
        btn_plot_lonXlat.disabled = True
        try:
            print("Opening : " + full_url)
            dataset = xr.open_dataset(full_url)
            log("Dataset successfully opened. Loading data...")
            kdimsSingularValue = list(
                filter(lambda dim: dataset[dim].size == 1, kdims))
            kdimsMultipleValues = list(
                filter(lambda dim: dataset[dim].size > 1, kdims))
            indexers = {
                key: dataset[key].values[0]
                for key in kdimsSingularValue
            }
            print(indexers)
            dataset = dataset.sel(indexers=indexers)
            print(kdimsMultipleValues, kdimsSingularValue)

            xr_dataset = gv.Dataset(
                dataset[var_name],
                group=dsTable.to_long_name(var_name, True) + "  ",
                crs=ccrs.PlateCarree())
            image = xr_dataset.to(gv.Image, [lon_key, lat_key], dynamic=True)

            graph = image.options(colorbar=True,
                                  tools=['hover'],
                                  cmap="viridis",
                                  width=800,
                                  height=640,
                                  colorbar_position="right",
                                  toolbar="below") * gf.coastline()
            renderer = hv.renderer('bokeh')
            hover = HoverTool(
                tooltips=[
                    ("(x,y)", "(@lon{%0.1f}, @lat{%0.1f})"),
                    ('desc', '@' + var_name),
                ],
                formatters={
                    'y': 'printf',  # use 'datetime' formatter for 'date' field
                    'x':
                    'printf',  # use 'printf' formatter for 'adj close' field
                    # use default 'numeral' formatter for other fields
                })
            plot = renderer.get_plot(graph)

            if len(kdimsMultipleValues) > 2:

                # callback_policy="mouseup" for slider in plots

                print(plot)
                plot = renderer.get_widget(plot, "server")
                bokeh_layout = plot.init_layout()
                print(bokeh_layout)

                latFull = dsTable.meta_variables[lat_key]["attributes"][
                    "standard_name"]["value"]
                lonFull = dsTable.meta_variables[lon_key]["attributes"][
                    "standard_name"]["value"]

                bk_plot = bokeh_layout.children[0]
                #bk_plot.add_tools(hover)
                bk_slider = bokeh_layout.children[1].children[1]
                print(bk_slider.callback_policy)
                bk_slider.callback_policy = "mouseup"
                bk_plot.xaxis.axis_label = lonFull
                bk_plot.yaxis.axis_label = latFull
                print(lonFull, latFull)
                # bk_plot.xaxis[0].formatter = NumeralTickFormatter(format="0.0")

                # bk_plot.yaxis[0].formatter = NumeralTickFormatter(format="$0")
            else:
                bokeh_layout = plot.state

            tab = Panel(title=timestamp, child=bokeh_layout)
            plotTabs.tabs.append(tab)

            log("Data successfully loaded!")
        except Exception as e:
            log("Failed to open or process dataset: %s" % full_url, e)
        finally:
            btn_plot_lonXlat.disabled = False