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)
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