Exemple #1
0
def main(args=None):
    """
    Parse the arguments, get the data in a df, and create the plot

    :return: if requested, return the plot as JSON object
    """
    if args is None:
        args = sys.argv[1:]
    parsed_args = parse_arguments(arguments=args)

    conn = connect_to_database(db_path=parsed_args.database)
    c = conn.cursor()

    scenario_id, scenario = get_scenario_id_and_name(
        scenario_id_arg=parsed_args.scenario_id,
        scenario_name_arg=parsed_args.scenario,
        c=c,
        script="energy_plot")

    tech_colors = get_tech_colors(c)
    tech_plotting_order = get_tech_plotting_order(c)
    energy_unit = get_unit(c, "energy")

    plot_title = "{}Energy by Period - {} - Stage {}".format(
        "{} - ".format(scenario) if parsed_args.scenario_name_in_title else "",
        parsed_args.load_zone, parsed_args.stage)
    plot_name = "EnergyPlot-{}-{}".format(parsed_args.load_zone,
                                          parsed_args.stage)

    df = get_plotting_data(conn=conn,
                           scenario_id=scenario_id,
                           load_zone=parsed_args.load_zone,
                           stage=parsed_args.stage)

    source, x_col_reordered = process_stacked_plot_data(
        df=df, y_col="energy_mwh", x_col=["period"], category_col="technology")

    # Multi-level index in CDS will be joined into one column with "_" separator
    x_col_cds = "_".join(x_col_reordered)
    x_col_label = ", ".join([x.capitalize() for x in x_col_reordered])
    plot = create_stacked_bar_plot(source=source,
                                   x_col=x_col_cds,
                                   x_label=x_col_label,
                                   y_label="Energy ({})".format(energy_unit),
                                   category_label="Technology",
                                   category_colors=tech_colors,
                                   category_order=tech_plotting_order,
                                   title=plot_title,
                                   ylimit=parsed_args.ylimit)

    # Show plot in HTML browser file if requested
    if parsed_args.show:
        show_plot(plot=plot,
                  plot_name=plot_name,
                  plot_write_directory=parsed_args.plot_write_directory,
                  scenario=scenario)

    # Return plot in json format if requested
    if parsed_args.return_json:
        return json_item(plot, plot_name)
def main(args=None):
    """
    Parse the arguments, get the data in a df, and create the plot

    :return: if requested, return the plot as JSON object
    """
    if args is None:
        args = sys.argv[1:]
    parsed_args = parse_arguments(arguments=args)

    conn = connect_to_database(db_path=parsed_args.database)

    tech_colors = get_tech_colors(conn.cursor())
    tech_plotting_order = get_tech_plotting_order(conn.cursor())
    power_unit = get_unit(conn.cursor(), "power")

    plot_title = "Total Capacity by Scenario - {} - Subproblem {} - Stage {}"\
        .format(
            parsed_args.load_zone,
            parsed_args.subproblem,
            parsed_args.stage
        )
    plot_name = "TotalCapacityPlot-{}-{}-{}"\
        .format(
            parsed_args.load_zone,
            parsed_args.subproblem,
            parsed_args.stage
        )

    df = get_plotting_data(conn=conn,
                           period=parsed_args.period,
                           load_zone=parsed_args.load_zone,
                           subproblem=parsed_args.subproblem,
                           stage=parsed_args.stage)

    source, x_col_reordered = process_stacked_plot_data(
        df=df,
        y_col="capacity_mw",
        x_col=["period", "scenario_id"],
        category_col="technology")

    # Multi-level index in CDS will be joined into one column with "_" separator
    x_col_cds = "_".join(x_col_reordered)
    x_col_label = ", ".join([x.capitalize() for x in x_col_reordered])
    plot = create_stacked_bar_plot(
        source=source,
        x_col=x_col_cds,
        x_label=x_col_label,
        y_label="Total Capacity ({})".format(power_unit),
        category_label="Technology",
        category_colors=tech_colors,
        category_order=tech_plotting_order,
        title=plot_title,
        ylimit=parsed_args.ylimit)

    # Show plot in HTML browser file if requested
    if parsed_args.show:
        show_plot(plot=plot,
                  plot_name=plot_name,
                  plot_write_directory=parsed_args.plot_write_directory)

    # Return plot in json format if requested
    if parsed_args.return_json:
        return json_item(plot, plot_name)
Exemple #3
0
def update_plots(attr, old, new):
    # TODO: could separate out updating the data sources from re-drawing the
    #  plots. Data source could be a DataProvier attribute that gets updated
    #  whenever user selections change.

    # Get the current selection values
    scenario = scenario_select.value
    stage = stage_select.value
    period = period_select.value
    zone = zone_select.value
    capacity_metric = capacity_select.value

    # Get data sources
    cap_src, cap_x_col = data.get_cap_src(scenario=scenario,
                                          stage=stage,
                                          period=period,
                                          zone=zone,
                                          capacity_metric=capacity_metric)
    energy_src, energy_x_col = data.get_energy_src(scenario=scenario,
                                                   stage=stage,
                                                   period=period,
                                                   zone=zone)
    cost_src, cost_x_col = data.get_cost_src(scenario=scenario,
                                             stage=stage,
                                             period=period,
                                             zone=zone)
    summary_src = data.get_summary_src(scenario=scenario,
                                       stage=stage,
                                       period=period,
                                       zone=zone)
    objective_src = data.get_objective_src(scenario=scenario, stage=stage)

    # Create Bokeh Plots and Tables
    title = PreText(
        text="Results: {} - {} - {}".format(scenario, period, zone))
    summary_table = create_datatable(summary_src)
    objective_table = create_datatable(objective_src)
    cap_plot = create_stacked_bar_plot(source=cap_src,
                                       x_col=cap_x_col,
                                       title="Capacity by Technology",
                                       category_label="Technology",
                                       y_label="Capacity (MW)")
    energy_plot = create_stacked_bar_plot(
        source=energy_src,
        x_col=energy_x_col,
        title="Energy by Technology",
        category_label="Technology",
        y_label="Energy (MWh)"  # TODO: link to units
    )
    cost_plot = create_stacked_bar_plot(
        source=cost_src,
        x_col=cost_x_col,
        title="Cost by Component",
        category_label="Cost Component",
        y_label="Cost (million USD)"  # TODO: link to units
    )

    # Update layout with new plots
    layout.children[0] = title
    top_row.children[1] = summary_table
    top_row.children[2] = objective_table
    middle_row.children[0] = cap_plot
    middle_row.children[1] = energy_plot
    bottom_row.children[0] = cost_plot