def render_sector(s, sector_path, level): sector_emissions = s.sum(level=0).sort_values(ascending=False) for subsector_name, emissions in sector_emissions.iteritems(): if not subsector_name: continue subsector_path = tuple([*sector_path, subsector_name]) next_metadata = SECTORS for sp in subsector_path: metadata = next_metadata[sp] next_metadata = metadata.get('subsectors', {}) if current_sector == subsector_path: active = True else: active = False page = get_page_for_emission_sector(*subsector_path) name = metadata.get('name_%s' % get_active_locale()) if name is None: name = metadata['name'] item = _make_nav_item(name, emissions, level, page, active=active) items.append(item) ss = s[subsector_name] if isinstance(ss, pd.Series): render_sector(ss, subsector_path, level + 1)
def render_page(): cols = [] edf = predict_emissions().dropna(axis=1, how='all') forecast = edf.pop('Forecast') graph = PredictionFigure(sector_name=None, unit_name='kt', title='Päästöt yhteensä', smoothing=True, fill=True, stacked=True, legend=True, legend_x=0.8) for sector_name, sector_metadata in SECTORS.items(): df = pd.DataFrame(edf[sector_name]) df['Forecast'] = forecast fig = make_sector_fig(df, sector_name, sector_metadata) sector_page = get_page_for_emission_sector(sector_name, None) card = GraphCard(id='emissions-%s' % sector_name, graph=dict(figure=fig), link_to_page=sector_page) cols.append(dbc.Col(card.render(), md=6)) # Add the summed sector to the all emissions graph df = df.drop(columns=['Forecast']) s = df.sum(axis=1) s.name = 'Emissions' df = pd.DataFrame(s) df['Forecast'] = forecast graph.add_series(df=df, trace_name=sector_metadata['name'], column_name='Emissions', historical_color=sector_metadata['color']) target_year = get_variable('target_year') ref_year = get_variable('ghg_reductions_reference_year') perc_off = get_variable('ghg_reductions_percentage_in_target_year') last_hist_year = edf.loc[~forecast].index.max() last_hist = edf.loc[last_hist_year].sum() end_emissions = edf.loc[target_year].sum() ref_emissions = edf.loc[ref_year].sum() target_emissions = ref_emissions * (1 - perc_off / 100) target_year_emissions = edf.loc[target_year].sum() sticky = StickyBar( label='Päästövähennykset yhteensä', goal=last_hist - target_emissions, value=last_hist - end_emissions, unit='kt', below_goal_good=False, ) card = GraphCard(id='emissions-total', graph=dict(figure=graph.get_figure())) return html.Div( [dbc.Row(dbc.Col(card.render())), dbc.Row(cols), sticky.render()])
def get_content(self): lang = get_active_locale() main_sector_name = self.emission_sector[0] main_sector_metadata = SECTORS[main_sector_name] cols = [] edf = predict_emissions().dropna(axis=1, how='all') forecast = edf.pop('Forecast') edf = edf[main_sector_name] subsectors = main_sector_metadata['subsectors'] colors = generate_color_scale(main_sector_metadata['color'], len(subsectors)) graph = PredictionFigure(sector_name=main_sector_name, unit_name='kt', title=_('Total emissions'), smoothing=True, fill=True, stacked=True, legend=True, legend_x=0.8) for idx, (sector_name, sector_metadata) in enumerate(subsectors.items()): df = pd.DataFrame(edf[sector_name]) df['Forecast'] = forecast fig = self.make_sector_fig(df, sector_name, sector_metadata, colors[idx]) sector_page = get_page_for_emission_sector(main_sector_name, sector_name) card = GraphCard(id='emissions-%s-%s' % (main_sector_name, sector_name), graph=dict(figure=fig), link_to_page=sector_page) cols.append(dbc.Col(card.render(), md=6)) # Add the summed sector to the all emissions graph df = df.drop(columns=['Forecast']) s = df.sum(axis=1) s.name = 'Emissions' df = pd.DataFrame(s) df['Forecast'] = forecast graph.add_series(df=df, trace_name=sector_metadata.get( 'name_%s' % lang, sector_metadata['name']), column_name='Emissions', historical_color=colors[idx]) self.total_emissions = edf.iloc[-1].sum() card = GraphCard(id='%s-emissions-total' % main_sector_name, graph=dict(figure=graph.get_figure())) return html.Div([ dbc.Row(dbc.Col(card.render())), dbc.Row(cols), ])
def render(self, is_top_row: bool = True) -> dbc.Card: graph = Graph(self.id, self.graph, self.slider) classes = self.get_classes(is_top_row) graph_el = html.Div(graph.render(), className="slider-card__content") if self.link_to_page: if isinstance(self.link_to_page, tuple): from pages.routing import get_page_for_emission_sector page = get_page_for_emission_sector(*self.link_to_page) else: page = self.link_to_page graph_el = dcc.Link(children=graph_el, href=page.path) card = dbc.Card( dbc.CardBody(children=[ graph_el, dbc.Row(id=self.id + '-description'), self.extra_content, ]), className=' '.join(classes), ) return card
def render(self, is_top_row: bool = True) -> dbc.Card: graph = Graph(self.id, self.graph, self.slider) classes = self.get_classes(is_top_row) graph_el = html.Div(graph.render(), className="slider-card__content") language = get_active_locale() title = self.title_i18n.get(language, self.title) if title: header_content = dbc.CardHeader(html.H4(title)) else: header_content = None if self.link_to_page: if isinstance(self.link_to_page, tuple): from pages.routing import get_page_for_emission_sector page = get_page_for_emission_sector(*self.link_to_page) else: page = self.link_to_page link_el = dcc.Link(html.H5('[+]'), href=page.path, className="card-header__link") header_el = html.Div([link_el, header_content]) else: header_el = header_content card = dbc.Card( [ header_el, dbc.CardBody(children=[ graph_el, dbc.Row(children=self.render_description(), id=self.id + '-description'), self.extra_content, ]) ], className=' '.join(classes), ) return card
_('Emission reductions according to scenario') + ' %s–%s' % (self.last_historical_year, self.target_year)), self._render_emissions_bar() ], md=6) emissions_summary = self._render_value_summary( self.scenario_emissions, self.target_emissions, _('Total net emissions'), _('kt/year'), True) emissions_summary = dbc.Col(emissions_summary, md=3) if self.value is not None: summary = self._render_value_summary(self.value, self.goal, self.label, self.unit, self.below_goal_good) summary = dbc.Col(summary, md=3) else: summary = dbc.Col(md=3) return dbc.Alert([dbc.Row([pötkylä, summary, emissions_summary])], className="page-summary fixed-bottom") if __name__ == '__main__': # from calc.geothermal import get_historical_production # get_historical_production() from pages.routing import get_page_for_emission_sector page = get_page_for_emission_sector('BuildingHeating', 'DistrictHeat') assert page is not None StickyBar(current_page=page).render()