def make_df(self): if not all((self.geocolumn, self.location)): print("Not all information filled") print(f"Geocolumn : {self.geocolumn} - Location : {self.location}") return value_vars = self.kmapper[self.kind] df = self.pgcd.data_from_geocol(self.location, self.geocolumn, fill=True, as_datetime=True) df = df.set_index("Date")[value_vars] df.columns = [lutils.description(column) for column in df.columns] return df
def set_data_source(self) : if not all((self.geocolumn, self.location, self.columns)) : print ("Not all information filled") print(f"Geocolumn : {self.geocolumn} - Location : {self.location} - Columns : {self.columns}") return df = self.pgcd.data_from_day(day=self.date, report=False, fill=True, geocolumn=self.geocolumn) df = df[df[self.geocolumn] == self.location] if df.empty : raise Exception(f"No result found with current pie configuration : {self.geocolumn, self.location, self.day}") if len(df) > 1 : raise Exception(f"Multiple results found with current pie configuration : {self.geocolumn, self.location, self.day}") dic = list(df[self.columns].T.to_dict().values())[0] dic = {lutils.description(column) : value for column, value in dic.items()} super().set_data_source(dic)
def construct(pgcd, controller=None) : df_column = "Confirmed" lastday = pgcd.lastday() firstday = pgcd.firstday() mapper = "Log" # Make carto title = 'Coronavirus map : Day ' + str(lastday) tooltips = lutils.tooltips() tools = [PanTool(), WheelZoomTool(), ResetTool()] carto = WMap(pgcd, lastday, df_column, title=title, mkind=mapper, tooltips=tooltips, aspect_ratio=2, sizing_mode="scale_both", tools=tools) # Make a slider object: slider slider = DateSlider(title="Date", start=firstday, end=lastday, value=lastday, step=1, format="%Y-%d-%m", sizing_mode="stretch_width") carto.link_on_change("date", slider, postfun=convert_slider_date) # Make buttons lambda_callback_bleft = lambda : carto_shift_day(False, carto, slider) bleft = Button(label="Day -1", button_type="success", width=200) bleft.on_click(lambda_callback_bleft) lambda_callback_bright = lambda : carto_shift_day(True, carto, slider) bright = Button(label="Day +1", button_type="success", width=200) bright.on_click(lambda_callback_bright) # Select for carto options = [df_column for df_column in lutils.columns_description() if df_column not in ["Date"]] scol = Select(title="", options=options, value=df_column, width=200) rdesc_column = lambda column : lutils.description(column, reverse=True) carto.link_on_change("field", scol, postfun=rdesc_column) smap = Select(title="", options=list(COLOR_MAPPER_NAME.values()), value=COLOR_MAPPER_NAME[mapper], width=200) rdesc_cmapper = lambda name : lutils.reverse_mapping(COLOR_MAPPER_NAME, name) carto.link_on_change("mkind", smap, postfun=rdesc_cmapper) if controller : fun = lambda : update(slider, carto) controller.add_receiver("update", fun) new_signal = lambda country : controller.emit_signal("select_country", country) carto.add_receiver("doubletap", new_signal) return column( carto.figure, slider, row(bleft, bright, scol, smap, sizing_mode="stretch_width"), sizing_mode="stretch_both")
def construct(pgcd, controller=None): lastday = pgcd.lastday() firstday = pgcd.firstday() default_column = "Confirmed" default_geocolumn = "Country" # Figure barplot = DynamicBarPlot(pgcd, None, "Confirmed", lastday, ndisplay=20, aspect_ratio=4, sizing_mode="scale_width") # Select day slider_date = DateSlider(title="Date", start=firstday, end=lastday, value=lastday, step=1, format="%Y-%d-%m", sizing_mode="stretch_width") barplot.link_on_change("date", slider_date, postfun=convert_slider_date) # nice but not really effective. Keep it here if needed later somewhere else #slider_date = DatePicker(sizing_mode="stretch_width", min_date=firstday, max_date=lastday, value=lastday) # Select geocolumn (country / continent) select_region = Select(title="Region", options=["Continent", "Country"], value="Error", sizing_mode="stretch_width") barplot.link_on_change("geocolumn", select_region) # Select location columns = [ df_column for df_column in lutils.columns_description() if df_column not in ("Date", ) ] select_column = Select(title="Sort by", options=columns, value="Confirmed", width=100) postfun = lambda column: lutils.description(column, reverse=True) barplot.link_on_change("column", select_column, postfun=postfun) # Slider slider_ndisplay = Slider(title='Number of elements', start=2, end=10, step=1, value=5, sizing_mode="stretch_width") barplot.link_on_change("ndisplay", slider_ndisplay) select_region.on_change( "value", lambda attr, old, new: set_region(pgcd, slider_ndisplay, new)) # Controller if controller: controller.add_receiver( "change_region", lambda region: barplot_new_region( barplot, slider_ndisplay, region)) barplot.link_to_controller("date", controller, "bp_date") barplot.add_receiver( "doubletap", lambda location: controller.emit_signal("location", location)) select_region.value = default_geocolumn return column( row( #select_date, select_region, select_column, sizing_mode="stretch_width"), slider_ndisplay, slider_date, barplot.figure, sizing_mode="stretch_both")
def make_legend(self, * args, ** kwargs) : columns = [lutils.description(column) for column in self.columns] super().make_legend(columns=columns)
def construct(pgcd, controller=None): regions = ["Continent", "Country"] default_idx = 0 default_reg = regions[default_idx] default_col = ["Date", "Confirmed"] default_type = ["Linear", "Linear"] lc_data = { "pgcd": pgcd, "region": default_reg, "xname": default_col[0], "yname": default_col[1], "xtype": default_type[0], "ytype": default_type[1], "selections": [], "df": None } lc = LayoutController(**lc_data) axtype1 = PAT.axis_type(title="Linear scale", x="datetime", y="linear") axtype2 = PAT.axis_type(title="Log scale", x="datetime", y="log", kwargs={"replace_zero": np.nan}) tooltips = MultiLinesPlotScatter.default_tooltips() tooltips["data_x"].description = "Date" tooltips["data_x"].format = "%F" kwargs_hovertool = {"formatters": {'$data_x': 'datetime'}} mlp = PAT(MultiLinesPlotScatter, (axtype1, axtype2), pgcd, gcol=default_reg, xcol=default_col[0], ycol=default_col[1], aspect_ratio=2, sizing_mode="scale_both", tools=["reset"], tooltips=tooltips, kwargs_hovertool=kwargs_hovertool) lc.cpn["mlp"] = mlp # Select for MLP options = [ column for column in lutils.columns_description() if column not in ["Date"] ] ysc = Select(title="Y axis", options=options, value=default_col[1], sizing_mode="stretch_width") rdesc_column = lambda column: lutils.description(column, reverse=True) lc.link_on_change("yname", ysc, postfun=rdesc_column) # DataTable formatter = { acol: { "formatter": aformat } for acol, aformat in lutils.dic_formatter().items() } dt = DataTable(width=100, height=200, selectable="checkbox", columns_kwargs=formatter, sizing_mode="stretch_width") lc.cpn["datatable"] = dt dt.add_receiver("selection", lc.change_selection) # Search input for datatable ti = TextInput(name="datatableinput", placeholder="Search a country or region ...", sizing_mode="stretch_width") dt.link_input(ti, "Location") # Region toggle funregion = lambda idx: regions[idx] rbg = RadioButtonGroup(labels=regions, active=default_idx, sizing_mode="stretch_width") lc.link_on_change("region", rbg, "active", postfun=funregion) # Buttons for DataTable button_auto = Button(label="Auto overlay", button_type="success", sizing_mode="stretch_width") #cbba = lambda : distplots_autooveraly(distplots, cdata) #button_auto.on_click(cbba) button_reset = Button(label="Reset", button_type="warning", sizing_mode="stretch_width") lc.update_dt() # Default : Asia, Europe and North America dt.source.selected.indices = [2, 3, 4] return column( mlp.figure, row(ysc, sizing_mode="stretch_width"), rbg, ti, dt.dt, #row(button_reset, button_auto, sizing_mode="stretch_both"), sizing_mode="stretch_both")