Skip to content

Commit 4a58602

Browse files
committed
Final changes to figures
1 parent 5fd5c3d commit 4a58602

8 files changed

+135
-7
lines changed

papers/Martin_Staadecker_et_al_2022/analysis.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@
2727
prebuilt = prebuilt[(prebuilt.build_year + prebuilt.gen_max_age) > 2051]
2828
print("prebuilt alive :", len(prebuilt))
2929

30+
print("prebuild by tech")
31+
prebuilt_by_tech = prebuilt.groupby(["gen_energy_source", "gen_tech"]).GENERATION_PROJECT.count()
32+
print(prebuilt_by_tech)
33+
3034
prebuilt_by_tech = prebuilt.groupby(["gen_energy_source", "gen_tech"]).gen_capacity_limit_mw.sum() / 1000
35+
print("prebuilt by tech capacity")
3136
print(prebuilt_by_tech.sort_values(ascending=False))
3237
print(prebuilt_by_tech.sum())
3338

papers/Martin_Staadecker_et_al_2022/figure-1-baseline.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,11 @@ def rolling_avg(df):
148148
color=colors[columnName],
149149
label=columnName + " (no curtail.)",
150150
)
151-
ax_right.plot(duals, label="Estimated LMP", color="red")
151+
ax_right.plot(duals, label="Marginal Price", color="red")
152152
lines += ax.plot(load, color="orange", label="Demand")
153153
ax.set_title("A. Seasonal Profiles in the Baseline")
154154
ax.set_ylabel("Dispatch (TWh/day)")
155-
ax_right.set_ylabel(u"Estimated Locational Marginal Price ($/MWh)")
155+
ax_right.set_ylabel(u"Marginal Price of Electricity ($/MWh)")
156156
locator = mdates.MonthLocator()
157157
ax.xaxis.set_major_formatter(mdates.ConciseDateFormatter(locator))
158158
ax.set_ylim(-0.1, 4.7)
Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from matplotlib import pyplot as plt
88

9-
from papers.Martin_Staadecker_et_al_2022.util import get_scenario, set_style
9+
from papers.Martin_Staadecker_et_al_2022.util import get_scenario, set_style, save_figure
1010
from switch_model.tools.graph.main import GraphTools
1111

1212
tools = GraphTools([get_scenario("1342")], set_style=False)
@@ -16,14 +16,29 @@
1616
set_style()
1717
plt.close()
1818
fig = plt.figure()
19-
fig.set_size_inches(8, 8)
19+
fig.set_size_inches(6.850394, 6.850394)
2020
ax = fig.add_subplot(1, 1, 1, projection=tools.maps.get_projection())
2121

2222
tools.maps.draw_base_map(ax)
2323

24+
centers = {}
25+
2426
for _, lz in tools.maps._center_points.iterrows():
2527
center = lz.geometry.centroid
26-
ax.scatter(center.x, center.y, color="k", s=10, alpha=0.5)
27-
ax.text(center.x, center.y, lz.gen_load_zone, fontsize="x-small")
28+
ax.scatter(center.x, center.y, color="k", s=5, alpha=0.5)
29+
ax.text(center.x, center.y, lz.gen_load_zone, fontsize="small")
30+
centers[lz.gen_load_zone] = center
31+
32+
tx = tools.get_dataframe("transmission_lines.csv", from_inputs=True)
33+
tx = tx[["trans_lz1", "trans_lz2"]]
34+
for _, line in tx.iterrows():
35+
from_center = centers[line["trans_lz1"]]
36+
to_center = centers[line["trans_lz2"]]
37+
ax.plot([from_center.x, to_center.x], [from_center.y, to_center.y], color="k", linestyle="--", linewidth=1, alpha=0.3)
38+
39+
for lz, center in centers.items():
40+
ax.text(center.x, center.y, lz, fontsize="small")
2841

29-
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)
42+
plt.tight_layout()
43+
# %%
44+
save_figure("figure-s5-map-of-load-zones.png")
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from papers.Martin_Staadecker_et_al_2022.util import get_scenario
2+
from switch_model.tools.graph.main import GraphTools
3+
4+
tools = GraphTools(scenarios=[
5+
get_scenario("1342", "1342")
6+
])
7+
tools.pre_graphing(multi_scenario=False)
8+
9+
projects = tools.get_dataframe("generation_projects_info.csv", from_inputs=True, convert_dot_to_na=True)
10+
costs = tools.get_dataframe("gen_build_costs.csv", from_inputs=True, convert_dot_to_na=True)
11+
predetermined = tools.get_dataframe("gen_build_predetermined", from_inputs=True, convert_dot_to_na=True)
12+
13+
projects = projects.merge(
14+
costs,
15+
on=["GENERATION_PROJECT"],
16+
)
17+
18+
projects = projects.merge(
19+
predetermined,
20+
on=["GENERATION_PROJECT", "build_year"],
21+
how="left" # Makes a left join
22+
)
23+
24+
prebuilt = projects[projects.build_year != 2050]
25+
prebuilt_by_tech = (prebuilt.groupby(["gen_energy_source", "gen_tech"]).gen_capacity_limit_mw.sum() / 1000).round(1)
26+
print("prebuilt by tech capacity")
27+
print(prebuilt_by_tech)
28+
print(prebuilt_by_tech.sum())
29+
30+
31+
prebuilt = prebuilt[(prebuilt.build_year + prebuilt.gen_max_age) > 2051]
32+
prebuilt_by_tech = (prebuilt.groupby(["gen_energy_source", "gen_tech"]).gen_capacity_limit_mw.sum() / 1000).round(1)
33+
print("prebuilt by tech capacity still online")
34+
print(prebuilt_by_tech)
35+
print(prebuilt_by_tech.sum())
36+
37+
candidate = projects[projects.build_year == 2050]
38+
candidate.gen_capacity_limit_mw = candidate.gen_capacity_limit_mw.fillna(-999999999)
39+
print("candidate projects aggregated: ", len(candidate))
40+
candidate_by_tech = (candidate.groupby(["gen_energy_source", "gen_tech"]).gen_capacity_limit_mw.sum() / 1000).round(1)
41+
print(candidate_by_tech)
42+
print(candidate_by_tech[candidate_by_tech > 0].sum())
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from papers.Martin_Staadecker_et_al_2022.util import get_scenario
2+
from switch_model.tools.graph.main import GraphTools
3+
import pandas as pd
4+
5+
tools = GraphTools(scenarios=[
6+
get_scenario("1342", "1342")
7+
])
8+
tools.pre_graphing(multi_scenario=False)
9+
10+
projects = tools.get_dataframe("generation_projects_info.csv", from_inputs=True, convert_dot_to_na=True)
11+
costs = tools.get_dataframe("gen_build_costs.csv", from_inputs=True, convert_dot_to_na=True)
12+
predetermined = tools.get_dataframe("gen_build_predetermined", from_inputs=True, convert_dot_to_na=True)
13+
14+
projects = projects.merge(
15+
costs,
16+
on=["GENERATION_PROJECT"],
17+
)
18+
19+
projects = projects.merge(
20+
predetermined,
21+
on=["GENERATION_PROJECT", "build_year"],
22+
how="left" # Makes a left join
23+
)
24+
25+
# prebuilt = projects[projects.build_year != 2050]
26+
age = (projects.groupby(["gen_energy_source", "gen_tech"]).gen_max_age.unique())
27+
28+
forced_outage_rate = (projects.groupby(["gen_energy_source", "gen_tech"]).gen_forced_outage_rate.unique())
29+
30+
scheduled_outage_rate = (projects.groupby(["gen_energy_source", "gen_tech"]).gen_scheduled_outage_rate.unique())
31+
32+
all_data = pd.concat([age, forced_outage_rate, scheduled_outage_rate], axis=1)
33+
print(all_data)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from papers.Martin_Staadecker_et_al_2022.util import get_scenario
2+
from switch_model.tools.graph.main import GraphTools
3+
import pandas as pd
4+
5+
tools = GraphTools(scenarios=[
6+
get_scenario("1342", "1342")
7+
])
8+
tools.pre_graphing(multi_scenario=False)
9+
10+
projects = tools.get_dataframe("generation_projects_info.csv", from_inputs=True, convert_dot_to_na=True)
11+
costs = tools.get_dataframe("gen_build_costs.csv", from_inputs=True, convert_dot_to_na=True)
12+
predetermined = tools.get_dataframe("gen_build_predetermined", from_inputs=True, convert_dot_to_na=True)
13+
14+
projects = projects.merge(
15+
costs,
16+
on=["GENERATION_PROJECT"],
17+
)
18+
19+
projects = projects.merge(
20+
predetermined,
21+
on=["GENERATION_PROJECT", "build_year"],
22+
how="left" # Makes a left join
23+
)
24+
25+
projects = projects[projects.build_year == 2050]
26+
group = projects.groupby(["gen_energy_source", "gen_tech"])
27+
28+
overnight = group.gen_overnight_cost.mean()
29+
fixed = group.gen_fixed_om.mean()
30+
variable = group.gen_variable_om.mean()
31+
32+
all_data = pd.concat([overnight, fixed, variable], axis=1).round(0)
33+
print(all_data)

0 commit comments

Comments
 (0)