Exemple #1
0
    def test_raster_layer(self):
        tiles = StamenTerrain().redim.range(x=self.x_range,
                                            y=self.y_range).opts(alpha=0.7,
                                                                 min_zoom=3,
                                                                 max_zoom=7)

        fig_dict = plotly_renderer.get_plot_state(tiles)

        # Check dummy trace
        self.assertEqual(len(fig_dict["data"]), 1)
        dummy_trace = fig_dict["data"][0]
        self.assertEqual(dummy_trace["type"], "scattermapbox")
        self.assertEqual(dummy_trace["lon"], [])
        self.assertEqual(dummy_trace["lat"], [])
        self.assertEqual(dummy_trace["showlegend"], False)

        # Check mapbox subplot
        subplot = fig_dict["layout"]["mapbox"]
        self.assertEqual(subplot["style"], "white-bg")
        self.assertEqual(subplot['center'], {
            'lat': self.lat_center,
            'lon': self.lon_center
        })

        # Check for raster layer
        layers = fig_dict["layout"]["mapbox"].get("layers", [])
        self.assertEqual(len(layers), 1)
        layer = layers[0]
        self.assertEqual(layer["source"][0].lower(), tiles.data.lower())
        self.assertEqual(layer["opacity"], 0.7)
        self.assertEqual(layer["sourcetype"], "raster")
        self.assertEqual(layer["minzoom"], 3)
        self.assertEqual(layer["maxzoom"], 7)
        self.assertEqual(layer["sourceattribution"],
                         _ATTRIBUTIONS[('stamen', 'com/t')])
Exemple #2
0
hv.extension('bokeh', logo=False)

usecols = [
    'dropoff_x', 'dropoff_y', 'pickup_x', 'pickup_y', 'dropoff_hour',
    'pickup_hour', 'passenger_count'
]
df = dd.read_parquet('../../data/nyc_taxi_wide.parq',
                     engine='fastparquet')[usecols].persist()
opts = dict(width=1000,
            height=600,
            xaxis=None,
            yaxis=None,
            bgcolor='black',
            show_grid=False)
cmaps = ['fire', 'bgy', 'bgyw', 'bmy', 'gray', 'kbc']
tiles = StamenTerrain()


class NYCTaxiExplorer(param.Parameterized):
    alpha = param.Magnitude(default=0.75,
                            doc="Alpha value for the map opacity")
    cmap = param.ObjectSelector(cm['fire'], objects={c: cm[c] for c in cmaps})
    hour = param.Range(default=(0, 24), bounds=(0, 24))
    location = param.ObjectSelector(default='dropoff',
                                    objects=['dropoff', 'pickup'])

    @param.depends('location', 'hour')
    def points(self):
        points = hv.Points(df,
                           kdims=[self.location + '_x', self.location + '_y'],
                           vdims=['dropoff_hour'])
Exemple #3
0
    def test_overlay(self):
        # Base layer is mapbox vector layer
        tiles = Tiles("").opts(mapboxstyle="dark", accesstoken="token-str")

        # Raster tile layer
        stamen_raster = StamenTerrain().opts(alpha=0.7)

        # RGB layer
        rgb_data = np.random.rand(10, 10, 3)
        rgb = RGB(rgb_data,
                  bounds=(self.x_range[0], self.y_range[0], self.x_range[1],
                          self.y_range[1])).opts(opacity=0.5)

        # Points layer
        points = Points([(0, 0), (self.x_range[1], self.y_range[1])
                         ]).opts(show_legend=True)

        # Bounds
        bounds = Bounds((self.x_range[0], self.y_range[0], 0, 0))

        # Overlay
        overlay = (tiles * stamen_raster * rgb * points * bounds).redim.range(
            x=self.x_range, y=self.y_range)

        # Render to plotly figure dictionary
        fig_dict = plotly_renderer.get_plot_state(overlay)

        # Check number of traces and layers
        traces = fig_dict["data"]
        subplot = fig_dict["layout"]["mapbox"]
        layers = subplot["layers"]

        self.assertEqual(len(traces), 5)
        self.assertEqual(len(layers), 2)

        # Check vector layer
        dummy_trace = traces[0]
        self.assertEqual(dummy_trace["type"], "scattermapbox")
        self.assertEqual(dummy_trace["lon"], [])
        self.assertEqual(dummy_trace["lat"], [])
        self.assertFalse(dummy_trace["showlegend"])

        self.assertEqual(subplot["style"], "dark")
        self.assertEqual(subplot["accesstoken"], "token-str")
        self.assertEqual(subplot['center'], {
            'lat': self.lat_center,
            'lon': self.lon_center
        })

        # Check raster layer
        dummy_trace = traces[1]
        raster_layer = layers[0]
        self.assertEqual(dummy_trace["type"], "scattermapbox")
        self.assertEqual(dummy_trace["lon"], [])
        self.assertEqual(dummy_trace["lat"], [])
        self.assertFalse(dummy_trace["showlegend"])

        # Check raster_layer
        self.assertEqual(raster_layer["below"], "traces")
        self.assertEqual(raster_layer["opacity"], 0.7)
        self.assertEqual(raster_layer["sourcetype"], "raster")
        self.assertEqual(raster_layer["source"][0].lower(),
                         stamen_raster.data.lower())

        # Check RGB layer
        dummy_trace = traces[2]
        rgb_layer = layers[1]
        self.assertEqual(dummy_trace["type"], "scattermapbox")
        self.assertEqual(dummy_trace["lon"], [None])
        self.assertEqual(dummy_trace["lat"], [None])
        self.assertFalse(dummy_trace["showlegend"])

        # Check rgb_layer
        self.assertEqual(rgb_layer["below"], "traces")
        self.assertEqual(rgb_layer["opacity"], 0.5)
        self.assertEqual(rgb_layer["sourcetype"], "image")
        self.assertTrue(
            rgb_layer["source"].startswith("data:image/png;base64,iVBOR"))
        self.assertEqual(rgb_layer["coordinates"],
                         [[self.lon_range[0], self.lat_range[1]],
                          [self.lon_range[1], self.lat_range[1]],
                          [self.lon_range[1], self.lat_range[0]],
                          [self.lon_range[0], self.lat_range[0]]])

        # Check Points layer
        points_trace = traces[3]
        self.assertEqual(points_trace["type"], "scattermapbox")
        self.assertEqual(points_trace["lon"], np.array([0, self.lon_range[1]]))
        self.assertEqual(points_trace["lat"], np.array([0, self.lat_range[1]]))
        self.assertEqual(points_trace["mode"], "markers")
        self.assertTrue(points_trace.get("showlegend", True))

        # Check Bounds layer
        bounds_trace = traces[4]
        self.assertEqual(bounds_trace["type"], "scattermapbox")
        self.assertEqual(
            bounds_trace["lon"],
            np.array([
                self.lon_range[0], self.lon_range[0], 0, 0, self.lon_range[0]
            ]))
        self.assertEqual(
            bounds_trace["lat"],
            np.array([
                self.lat_range[0], 0, 0, self.lat_range[0], self.lat_range[0]
            ]))
        self.assertEqual(bounds_trace["mode"], "lines")
        self.assertTrue(points_trace["showlegend"], False)

        # No xaxis/yaxis
        self.assertNotIn("xaxis", fig_dict["layout"])
        self.assertNotIn("yaxis", fig_dict["layout"])
Exemple #4
0
class MedNumApp(param.Parameterized):
    localisation = param.String(
        default="Toulouse", label=""
    )  # default=["Toulouse"], objects=list(ifrag_cont_df_merged.nom_com.unique()), label='', doc="A string")
    score = param.Range(
        default=(0, 250),
        bounds=(0, 250),
    )  # , name="Score")
    interfaces_num = param.ListSelector(label="")
    infos_num = param.ListSelector(label="")

    comp_admin = param.ListSelector(label="")
    comp_usage_num = param.ListSelector(label="")

    point_ref = param.Selector(
        objects=["Pays", "Région", "Département", "Intercommune", "Commune"],
        label="Point de référence",
    )

    donnees_infra = param.Action(lambda x: x,
                                 doc="""Données Infra-Communales""",
                                 precedence=0.7)
    export_data = param.Action(
        lambda x: x.timestamps.append(dt.datetime.utcnow()),
        doc="""Exporter les résultats""",
        precedence=0.7,
    )
    edit_report = param.Action(
        lambda x: x.timestamps.append(dt.datetime.utcnow()),
        doc="""Editer un rapport""",
        precedence=0.7,
    )
    tiles = StamenTerrain()

    def __init__(self, **params):
        super(MedNumApp, self).__init__(**params)
        self.param.interfaces_num.objects = OPTIONS_INT_NUM
        self.param.infos_num.objects = OPTIONS_X_INFOS

        self.param.comp_admin.objects = OPTIONS_X_COMP_ADMIN
        self.param.comp_usage_num.objects = OPTIONS_X_COMP_USAGE

        indic_w_g_value_1 = {
            "name":
            "indic1_1",
            "indicators": [
                dict(name="accès", main=True, value=85, max_value=100),
                dict(name="information", value=118),
                # dict(name="indic3", value=168),
                dict(name="Interfaces", value=53),
            ],
        }

        indic_w_g_value_2 = {
            "indicators": [
                dict(name="Compétences", main=True, value=135, max_value=180),
                dict(name="indic3_2", value=115),
                dict(name="indic4", value=155),
            ]
        }

        self.indicator_w_gauge_1 = IndicatorsWithGauge(**indic_w_g_value_1)
        self.indicator_w_gauge_2 = IndicatorsWithGauge(**indic_w_g_value_2)
        self.indicator_glob_stats = self.glob_stats()

    def lat_widgets(self):
        score_panel = pn.Column("# Score", self.param.score)
        point_ref_panel = pn.Column(
            "# Point de reference",
            pn.Param(
                self.param.point_ref,
                widgets={
                    "point_ref": pn.widgets.RadioBoxGroup,
                },
            ),
        )
        export_panel = pn.Column("# Aller plus loin", self.param.export_data,
                                 self.param.edit_report)

        localisation_panel = pn.Column("# Localisation",
                                       self.param.localisation)
        spec_interfaces = {
            "interfaces_num": pn.widgets.TreeViewCheckBox,
            "infos_num": pn.widgets.TreeViewCheckBox,
            "comp_admin": pn.widgets.TreeViewCheckBox,
            "comp_usage_num": pn.widgets.TreeViewCheckBox,
        }

        g_params = [
            pn.Param(self.param[p], widgets={p: w})
            for p, w in spec_interfaces.items()
        ]
        pn.Column(*g_params)
        indicateurs = pn.Column("# Indicateurs", *g_params)

        ordered_panel = pn.Column(
            localisation_panel,
            score_panel,
            indicateurs,
            point_ref_panel,
            export_panel,
            width=400,
        )

        return ordered_panel

    def link_ctrl_params_to_indic_params(self):
        try:
            return self.indicator_w_gauge.view
        except:
            return ""

    @pn.depends('score', watch=True)
    def glob_stats(self):
        label = "Score Global"
        score_min, score_max = self.score
        HTML = """
        <h1>{loc}</h1>
        <b>{score_name}</b> | {score_min}->{score_max}<br>

        <b>{pop_name}</b> | {population}
        """.format(loc=self.localisation,
                   score_name=label,
                   score_min=score_min,
                   score_max=score_max,
                   pop_name="Population",
                   population="Beaucoup !!")
        return pn.pane.HTML(HTML)

    def top_panel(self):
        try:
            return pn.Row(self.indicator_glob_stats,
                          self.indicator_w_gauge_1.view,
                          self.indicator_w_gauge_2.view,
                          css_classes=["top-custom"],
                          height=120)
        except:
            return ""

    @param.depends("localisation")  # , interfaces_num)
    def plot(self):

        commune_plot = gv.Polygons(
            ifrag_cont_df_merged[ifrag_cont_df_merged.nom_com ==
                                 self.localisation],
            vdims=vdims,
        )
        return self.tiles * commune_plot.opts(
            color=indice, width=600, height=600, fill_alpha=0.5)

    def view(self):
        self.view = pn.Row(
            self.lat_widgets(),
            pn.Spacer(width=10),
            pn.Column(self.top_panel, pn.Spacer(height=80), self.plot),
        )

    def panel(self):
        return self.lat_widgets()