restore compatibility with latest master version
This commit is contained in:
parent
520cad53a2
commit
6f901f4c50
@ -517,7 +517,7 @@ rule plot_network:
|
|||||||
input:
|
input:
|
||||||
overrides="data/override_component_attrs",
|
overrides="data/override_component_attrs",
|
||||||
network=RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc",
|
network=RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc",
|
||||||
regions='../pypsa-eur/resources/regions_onshore_elec_s{simpl}_{clusters}.geojson'
|
regions=pypsaeur('resources/regions_onshore_elec_s{simpl}_{clusters}.geojson')
|
||||||
output:
|
output:
|
||||||
map=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf",
|
map=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf",
|
||||||
today=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}-today.pdf"
|
today=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}-today.pdf"
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
backend: Agg
|
|
||||||
font.family: sans-serif
|
font.family: sans-serif
|
||||||
font.sans-serif: Ubuntu, DejaVu Sans
|
font.sans-serif: Ubuntu, DejaVu Sans
|
||||||
image.cmap: viridis
|
image.cmap: viridis
|
@ -45,7 +45,9 @@ def mock_snakemake(rulename, **wildcards):
|
|||||||
This function is expected to be executed from the 'scripts'-directory of '
|
This function is expected to be executed from the 'scripts'-directory of '
|
||||||
the snakemake project. It returns a snakemake.script.Snakemake object,
|
the snakemake project. It returns a snakemake.script.Snakemake object,
|
||||||
based on the Snakefile.
|
based on the Snakefile.
|
||||||
|
|
||||||
If a rule has wildcards, you have to specify them in **wildcards.
|
If a rule has wildcards, you have to specify them in **wildcards.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
rulename: str
|
rulename: str
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
import pypsa
|
import pypsa
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import geopandas as gpd
|
import geopandas as gpd
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import cartopy.crs as ccrs
|
import cartopy.crs as ccrs
|
||||||
|
|
||||||
from matplotlib.legend_handler import HandlerPatch
|
from pypsa.plot import add_legend_circles, add_legend_patches, add_legend_lines
|
||||||
from matplotlib.patches import Circle, Patch
|
|
||||||
from pypsa.plot import projected_area_factor
|
|
||||||
|
|
||||||
from make_summary import assign_carriers
|
from make_summary import assign_carriers
|
||||||
from plot_summary import rename_techs, preferred_order
|
from plot_summary import rename_techs, preferred_order
|
||||||
@ -40,69 +37,6 @@ def rename_techs_tyndp(tech):
|
|||||||
else:
|
else:
|
||||||
return tech
|
return tech
|
||||||
|
|
||||||
class HandlerCircle(HandlerPatch):
|
|
||||||
"""
|
|
||||||
Legend Handler used to create circles for legend entries.
|
|
||||||
|
|
||||||
This handler resizes the circles in order to match the same dimensional
|
|
||||||
scaling as in the applied axis.
|
|
||||||
"""
|
|
||||||
def create_artists(
|
|
||||||
self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans
|
|
||||||
):
|
|
||||||
fig = legend.get_figure()
|
|
||||||
ax = legend.axes
|
|
||||||
|
|
||||||
unit = np.diff(ax.transData.transform([(0, 0), (1, 1)]), axis=0)[0][1]
|
|
||||||
radius = orig_handle.get_radius() * unit * (72 / fig.dpi)
|
|
||||||
center = 5 - xdescent, 3 - ydescent
|
|
||||||
p = plt.Circle(center, radius)
|
|
||||||
self.update_prop(p, orig_handle, legend)
|
|
||||||
p.set_transform(trans)
|
|
||||||
return [p]
|
|
||||||
|
|
||||||
|
|
||||||
def add_legend_circles(ax, sizes, labels, scale=1, srid=None, patch_kw={}, legend_kw={}):
|
|
||||||
|
|
||||||
if srid is not None:
|
|
||||||
area_correction = projected_area_factor(ax, n.srid)**2
|
|
||||||
sizes = [s * area_correction for s in sizes]
|
|
||||||
|
|
||||||
handles = make_legend_circles_for(sizes, scale, **patch_kw)
|
|
||||||
|
|
||||||
legend = ax.legend(
|
|
||||||
handles, labels,
|
|
||||||
handler_map={Circle: HandlerCircle()},
|
|
||||||
**legend_kw
|
|
||||||
)
|
|
||||||
|
|
||||||
ax.add_artist(legend)
|
|
||||||
|
|
||||||
|
|
||||||
def add_legend_lines(ax, sizes, labels, scale=1, patch_kw={}, legend_kw={}):
|
|
||||||
|
|
||||||
handles = [plt.Line2D([0], [0], linewidth=s/scale, **patch_kw) for s in sizes]
|
|
||||||
|
|
||||||
legend = ax.legend(
|
|
||||||
handles, labels,
|
|
||||||
**legend_kw
|
|
||||||
)
|
|
||||||
|
|
||||||
ax.add_artist(legend)
|
|
||||||
|
|
||||||
|
|
||||||
def add_legend_patches(ax, colors, labels, patch_kw={}, legend_kw={}):
|
|
||||||
|
|
||||||
handles = [Patch(facecolor=c, **patch_kw) for c in colors]
|
|
||||||
|
|
||||||
legend = ax.legend(handles, labels, **legend_kw)
|
|
||||||
|
|
||||||
ax.add_artist(legend)
|
|
||||||
|
|
||||||
|
|
||||||
def make_legend_circles_for(sizes, scale=1.0, **kw):
|
|
||||||
return [Circle((0, 0), radius=(s / scale)**0.5, **kw) for s in sizes]
|
|
||||||
|
|
||||||
|
|
||||||
def assign_location(n):
|
def assign_location(n):
|
||||||
for c in n.iterate_components(n.one_port_components | n.branch_components):
|
for c in n.iterate_components(n.one_port_components | n.branch_components):
|
||||||
@ -186,23 +120,23 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
|||||||
# should be zero
|
# should be zero
|
||||||
line_widths = n.lines.s_nom_opt - n.lines.s_nom
|
line_widths = n.lines.s_nom_opt - n.lines.s_nom
|
||||||
link_widths = n.links.p_nom_opt - n.links.p_nom
|
link_widths = n.links.p_nom_opt - n.links.p_nom
|
||||||
title = "Added grid"
|
title = "added grid"
|
||||||
|
|
||||||
if transmission:
|
if transmission:
|
||||||
line_widths = n.lines.s_nom_opt
|
line_widths = n.lines.s_nom_opt
|
||||||
link_widths = n.links.p_nom_opt
|
link_widths = n.links.p_nom_opt
|
||||||
linewidth_factor = 2e3
|
linewidth_factor = 2e3
|
||||||
line_lower_threshold = 0.
|
line_lower_threshold = 0.
|
||||||
title = "Today's grid"
|
title = "current grid"
|
||||||
else:
|
else:
|
||||||
line_widths = n.lines.s_nom_opt - n.lines.s_nom_min
|
line_widths = n.lines.s_nom_opt - n.lines.s_nom_min
|
||||||
link_widths = n.links.p_nom_opt - n.links.p_nom_min
|
link_widths = n.links.p_nom_opt - n.links.p_nom_min
|
||||||
title = "Added grid"
|
title = "added grid"
|
||||||
|
|
||||||
if transmission:
|
if transmission:
|
||||||
line_widths = n.lines.s_nom_opt
|
line_widths = n.lines.s_nom_opt
|
||||||
link_widths = n.links.p_nom_opt
|
link_widths = n.links.p_nom_opt
|
||||||
title = "Total grid"
|
title = "total grid"
|
||||||
|
|
||||||
line_widths[line_widths < line_lower_threshold] = 0.
|
line_widths[line_widths < line_lower_threshold] = 0.
|
||||||
link_widths[link_widths < line_lower_threshold] = 0.
|
link_widths[link_widths < line_lower_threshold] = 0.
|
||||||
@ -233,7 +167,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
|||||||
labelspacing=0.8,
|
labelspacing=0.8,
|
||||||
frameon=False,
|
frameon=False,
|
||||||
handletextpad=0,
|
handletextpad=0,
|
||||||
title='System cost',
|
title='system cost',
|
||||||
)
|
)
|
||||||
|
|
||||||
add_legend_circles(
|
add_legend_circles(
|
||||||
@ -247,6 +181,8 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
|||||||
|
|
||||||
sizes = [10, 5]
|
sizes = [10, 5]
|
||||||
labels = [f"{s} GW" for s in sizes]
|
labels = [f"{s} GW" for s in sizes]
|
||||||
|
scale = 1e3 / linewidth_factor
|
||||||
|
sizes = [s*scale for s in sizes]
|
||||||
|
|
||||||
legend_kw = dict(
|
legend_kw = dict(
|
||||||
loc="upper left",
|
loc="upper left",
|
||||||
@ -261,7 +197,6 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
|||||||
ax,
|
ax,
|
||||||
sizes,
|
sizes,
|
||||||
labels,
|
labels,
|
||||||
scale=linewidth_factor/1e3,
|
|
||||||
patch_kw=dict(color='lightgrey'),
|
patch_kw=dict(color='lightgrey'),
|
||||||
legend_kw=legend_kw
|
legend_kw=legend_kw
|
||||||
)
|
)
|
||||||
@ -312,8 +247,6 @@ def group_pipes(df, drop_direction=False):
|
|||||||
|
|
||||||
def plot_h2_map(network, regions):
|
def plot_h2_map(network, regions):
|
||||||
|
|
||||||
tech_colors = snakemake.config['plotting']['tech_colors']
|
|
||||||
|
|
||||||
n = network.copy()
|
n = network.copy()
|
||||||
if "H2 pipeline" not in n.links.carrier.unique():
|
if "H2 pipeline" not in n.links.carrier.unique():
|
||||||
return
|
return
|
||||||
@ -345,9 +278,11 @@ def plot_h2_map(network, regions):
|
|||||||
|
|
||||||
h2_new = n.links.loc[n.links.carrier=="H2 pipeline"]
|
h2_new = n.links.loc[n.links.carrier=="H2 pipeline"]
|
||||||
h2_retro = n.links.loc[n.links.carrier=='H2 pipeline retrofitted']
|
h2_retro = n.links.loc[n.links.carrier=='H2 pipeline retrofitted']
|
||||||
# sum capacitiy for pipelines from different investment periods
|
|
||||||
h2_new = group_pipes(h2_new)
|
if snakemake.config['foresight'] == 'myopic':
|
||||||
h2_retro = group_pipes(h2_retro, drop_direction=True).reindex(h2_new.index).fillna(0)
|
# sum capacitiy for pipelines from different investment periods
|
||||||
|
h2_new = group_pipes(h2_new)
|
||||||
|
h2_retro = group_pipes(h2_retro, drop_direction=True).reindex(h2_new.index).fillna(0)
|
||||||
|
|
||||||
if not h2_retro.empty:
|
if not h2_retro.empty:
|
||||||
|
|
||||||
@ -419,6 +354,7 @@ def plot_h2_map(network, regions):
|
|||||||
)
|
)
|
||||||
|
|
||||||
n.plot(
|
n.plot(
|
||||||
|
geomap=True,
|
||||||
bus_sizes=0,
|
bus_sizes=0,
|
||||||
link_colors=color_retrofit,
|
link_colors=color_retrofit,
|
||||||
link_widths=link_widths_retro,
|
link_widths=link_widths_retro,
|
||||||
@ -461,8 +397,10 @@ def plot_h2_map(network, regions):
|
|||||||
legend_kw=legend_kw
|
legend_kw=legend_kw
|
||||||
)
|
)
|
||||||
|
|
||||||
sizes = [50, 10]
|
sizes = [30, 10]
|
||||||
labels = [f"{s} GW" for s in sizes]
|
labels = [f"{s} GW" for s in sizes]
|
||||||
|
scale = 1e3 / linewidth_factor
|
||||||
|
sizes = [s*scale for s in sizes]
|
||||||
|
|
||||||
legend_kw = dict(
|
legend_kw = dict(
|
||||||
loc="upper left",
|
loc="upper left",
|
||||||
@ -476,7 +414,6 @@ def plot_h2_map(network, regions):
|
|||||||
ax,
|
ax,
|
||||||
sizes,
|
sizes,
|
||||||
labels,
|
labels,
|
||||||
scale=linewidth_factor/1e3,
|
|
||||||
patch_kw=dict(color='lightgrey'),
|
patch_kw=dict(color='lightgrey'),
|
||||||
legend_kw=legend_kw,
|
legend_kw=legend_kw,
|
||||||
)
|
)
|
||||||
@ -498,7 +435,6 @@ def plot_h2_map(network, regions):
|
|||||||
legend_kw=legend_kw
|
legend_kw=legend_kw
|
||||||
)
|
)
|
||||||
|
|
||||||
plt.gca().outline_patch.set_visible(False)
|
|
||||||
ax.set_facecolor("white")
|
ax.set_facecolor("white")
|
||||||
|
|
||||||
fig.savefig(
|
fig.savefig(
|
||||||
@ -564,7 +500,7 @@ def plot_ch4_map(network):
|
|||||||
pipe_colors = {
|
pipe_colors = {
|
||||||
"gas pipeline": "#f08080",
|
"gas pipeline": "#f08080",
|
||||||
"gas pipeline new": "#c46868",
|
"gas pipeline new": "#c46868",
|
||||||
"gas pipeline (2020)": 'lightgrey',
|
"gas pipeline (in 2020)": 'lightgrey',
|
||||||
"gas pipeline (available)": '#e8d1d1',
|
"gas pipeline (available)": '#e8d1d1',
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -584,7 +520,7 @@ def plot_ch4_map(network):
|
|||||||
n.plot(
|
n.plot(
|
||||||
bus_sizes=bus_sizes,
|
bus_sizes=bus_sizes,
|
||||||
bus_colors=bus_colors,
|
bus_colors=bus_colors,
|
||||||
link_colors=pipe_colors['gas pipeline (2020)'],
|
link_colors=pipe_colors['gas pipeline (in 2020)'],
|
||||||
link_widths=link_widths_orig,
|
link_widths=link_widths_orig,
|
||||||
branch_components=["Link"],
|
branch_components=["Link"],
|
||||||
ax=ax,
|
ax=ax,
|
||||||
@ -621,7 +557,7 @@ def plot_ch4_map(network):
|
|||||||
labelspacing=0.8,
|
labelspacing=0.8,
|
||||||
frameon=False,
|
frameon=False,
|
||||||
handletextpad=1,
|
handletextpad=1,
|
||||||
title='Gas Sources',
|
title='gas sources',
|
||||||
)
|
)
|
||||||
|
|
||||||
add_legend_circles(
|
add_legend_circles(
|
||||||
@ -635,6 +571,8 @@ def plot_ch4_map(network):
|
|||||||
|
|
||||||
sizes = [50, 10]
|
sizes = [50, 10]
|
||||||
labels = [f"{s} GW" for s in sizes]
|
labels = [f"{s} GW" for s in sizes]
|
||||||
|
scale = 1e3 / linewidth_factor
|
||||||
|
sizes = [s*scale for s in sizes]
|
||||||
|
|
||||||
legend_kw = dict(
|
legend_kw = dict(
|
||||||
loc="upper left",
|
loc="upper left",
|
||||||
@ -642,14 +580,13 @@ def plot_ch4_map(network):
|
|||||||
frameon=False,
|
frameon=False,
|
||||||
labelspacing=0.8,
|
labelspacing=0.8,
|
||||||
handletextpad=1,
|
handletextpad=1,
|
||||||
title='Gas Pipeline'
|
title='gas pipeline'
|
||||||
)
|
)
|
||||||
|
|
||||||
add_legend_lines(
|
add_legend_lines(
|
||||||
ax,
|
ax,
|
||||||
sizes,
|
sizes,
|
||||||
labels,
|
labels,
|
||||||
scale=linewidth_factor/1e3,
|
|
||||||
patch_kw=dict(color='lightgrey'),
|
patch_kw=dict(color='lightgrey'),
|
||||||
legend_kw=legend_kw,
|
legend_kw=legend_kw,
|
||||||
)
|
)
|
||||||
@ -740,7 +677,7 @@ def plot_map_without(network):
|
|||||||
for s in (10, 5):
|
for s in (10, 5):
|
||||||
handles.append(plt.Line2D([0], [0], color=ac_color,
|
handles.append(plt.Line2D([0], [0], color=ac_color,
|
||||||
linewidth=s * 1e3 / linewidth_factor))
|
linewidth=s * 1e3 / linewidth_factor))
|
||||||
labels.append("{} GW".format(s))
|
labels.append(f"{s} GW")
|
||||||
l1_1 = ax.legend(handles, labels,
|
l1_1 = ax.legend(handles, labels,
|
||||||
loc="upper left", bbox_to_anchor=(0.05, 1.01),
|
loc="upper left", bbox_to_anchor=(0.05, 1.01),
|
||||||
frameon=False,
|
frameon=False,
|
||||||
@ -890,10 +827,10 @@ if __name__ == "__main__":
|
|||||||
snakemake = mock_snakemake(
|
snakemake = mock_snakemake(
|
||||||
'plot_network',
|
'plot_network',
|
||||||
simpl='',
|
simpl='',
|
||||||
clusters="45",
|
clusters="181",
|
||||||
lv=1.0,
|
lv='opt',
|
||||||
opts='',
|
opts='',
|
||||||
sector_opts='168H-T-H-B-I-A-solar+p3-dist1',
|
sector_opts='Co2L0-730H-T-H-B-I-A-solar+p3-linemaxext10',
|
||||||
planning_horizons="2050",
|
planning_horizons="2050",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user