pypsa-eur/scripts/plot_power_network_clustered.py
2024-02-12 10:54:15 +00:00

80 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: : 2023-2024 PyPSA-Eur Authors
#
# SPDX-License-Identifier: MIT
"""
Plot clustered electricity transmission network.
"""
import geopandas as gpd
import matplotlib.pyplot as plt
import pypsa
from _helpers import set_scenario_config
from matplotlib.lines import Line2D
from plot_power_network import load_projection
from pypsa.plot import add_legend_lines
if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"plot_power_network_clustered",
clusters=128,
configfiles=["../../config/config.test.yaml"],
)
set_scenario_config(snakemake)
lw_factor = 2e3
n = pypsa.Network(snakemake.input.network)
regions = gpd.read_file(snakemake.input.regions_onshore).set_index("name")
proj = load_projection(snakemake.params.plotting)
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={"projection": proj})
regions.to_crs(proj.proj4_init).plot(
ax=ax, facecolor="none", edgecolor="lightgray", linewidth=0.75
)
n.plot(
ax=ax,
margin=0.06,
line_widths=n.lines.s_nom / lw_factor,
link_colors=n.links.p_nom.apply(
lambda x: "darkseagreen" if x > 0 else "skyblue"
),
link_widths=2.0,
)
sizes = [10, 20]
labels = [f"HVAC ({s} GW)" for s in sizes]
scale = 1e3 / lw_factor
sizes = [s * scale for s in sizes]
legend_kw = dict(
loc=[0.25, 0.9],
frameon=False,
labelspacing=0.5,
handletextpad=1,
fontsize=13,
)
add_legend_lines(
ax, sizes, labels, patch_kw=dict(color="rosybrown"), legend_kw=legend_kw
)
handles = [
Line2D([0], [0], color="darkseagreen", lw=2),
Line2D([0], [0], color="skyblue", lw=2),
]
plt.legend(
handles,
["HVDC existing", "HVDC planned"],
frameon=False,
loc=[0.0, 0.9],
fontsize=13,
)
plt.savefig(snakemake.output.map, bbox_inches="tight")