Пример #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)