Пример #1
0
def plot_summary(model, to_file=False, mapbox_access_token=None):
    """
    Plot a summary containing timeseries, installed capacities, and
    transmission plots. Returns a HTML string by default, returns None if
    ``to_file`` given (and saves the HTML string to file).

    Parameters
    ----------
    to_file : str, optional
        Path to output file to save HTML to.
    mapbox_access_token : str, optional
        (passed to plot_transmission) If given and a valid Mapbox API
        key, a Mapbox map is drawn for lat-lon coordinates, else
        (by default), a more simple built-in map.

    """
    subset = {'costs': ['monetary']}

    timeseries = _plot(*plot_timeseries(model, subset=subset), html_only=True)
    capacity = _plot(*plot_capacity(model, subset=subset), html_only=True)
    if 'loc_coordinates' in model._model_data:
        transmission = _plot(*plot_transmission(
            model, html_only=True, mapbox_access_token=mapbox_access_token
        ), html_only=True)
    else:
        transmission = '<br><br><p>No location coordinates defined -<br>not plotting transmission.</p>'

    template_path = os.path.join(
        os.path.dirname(__file__), '..', '..', 'config', 'plots_template.html'
    )
    with open(template_path, 'r') as f:
        html_template = jinja2.Template(f.read())

    if 'solution_time' in model._model_data.attrs:
        solution_time = model._model_data.attrs['solution_time'] / 60
        time_finished = model._model_data.attrs['time_finished']
        result_stats = 'taking {:.2f} minutes to solve, completed at {}'.format(
            solution_time, time_finished
        )
    else:
        result_stats = 'inputs only'

    html = html_template.render(
        model_name=model._model_data.attrs['model.name'],
        calliope_version=model._model_data.attrs['calliope_version'],
        result_stats=result_stats,
        top=timeseries,
        bottom_left=capacity,
        bottom_right=transmission,
    )

    # Strip plotly-inserted style="..." attributes
    html = re.sub(r'style=".+?"', '', html)

    if to_file:
        with open(to_file, 'w') as f:
            f.write(html)
    else:
        return html
Пример #2
0
def plot_summary(model, out_file=None, mapbox_access_token=None):
    """
    Plot a summary containing timeseries, installed capacities, and
    transmission plots. Returns a HTML string if ``out_file`` not
    given, else None.

    Parameters
    ----------
    out_file : str, optional
        Path to output file to save HTML to.
    mapbox_access_token : str, optional
        (passed to plot_transmission) If given and a valid Mapbox API
        key, a Mapbox map is drawn for lat-lon coordinates, else
        (by default), a more simple built-in map.

    """
    timeseries = _plot(*plot_timeseries(model), html_only=True)
    capacity = _plot(*plot_capacity(model), html_only=True)
    transmission = _plot(*plot_transmission(
        model, html_only=True, mapbox_access_token=mapbox_access_token
    ), html_only=True)

    template_path = os.path.join(
        os.path.dirname(__file__), '..', '..', 'config', 'plots_template.html'
    )
    with open(template_path, 'r') as f:
        html_template = jinja2.Template(f.read())

    html = html_template.render(
        model_name=model._model_data.attrs['model.name'],
        calliope_version=model._model_data.attrs['calliope_version'],
        solution_time=(model._model_data.attrs['solution_time'] / 60),
        time_finished=model._model_data.attrs['time_finished'],
        top=timeseries,
        bottom_left=capacity,
        bottom_right=transmission,
    )

    # Strip plotly-inserted style="..." attributes
    html = re.sub(r'style=".+?"', '', html)

    if out_file:
        with open(out_file, 'w') as f:
            f.write(html)
    else:
        return html
Пример #3
0
 def transmission(self, **kwargs):
     data, layout = plot_transmission(self._model, **kwargs)
     return _plot(data, layout, **kwargs)
Пример #4
0
 def transmission(self, **kwargs):
     self.check_optimality()
     data, layout = plot_transmission(self._model, **kwargs)
     return _plot(data, layout, **kwargs)
Пример #5
0
 def transmission(self, **kwargs):
     self.check_optimality()
     data, layout = plot_transmission(self._model, **kwargs)
     return _plot(data, layout, **kwargs)