color adaptations, new features
This commit is contained in:
parent
c754f253bc
commit
a8171ec9f3
@ -478,7 +478,8 @@ rule prepare_sector_network:
|
||||
rule plot_network:
|
||||
input:
|
||||
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'
|
||||
output:
|
||||
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"
|
||||
|
@ -42,9 +42,7 @@ def mock_snakemake(rulename, **wildcards):
|
||||
This function is expected to be executed from the 'scripts'-directory of '
|
||||
the snakemake project. It returns a snakemake.script.Snakemake object,
|
||||
based on the Snakefile.
|
||||
|
||||
If a rule has wildcards, you have to specify them in **wildcards.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
rulename: str
|
||||
|
@ -2,6 +2,7 @@ import pypsa
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import geopandas as gpd
|
||||
import matplotlib.pyplot as plt
|
||||
import cartopy.crs as ccrs
|
||||
|
||||
@ -63,7 +64,6 @@ def add_legend_circles(ax, sizes, labels, scale=1, srid=None, patch_kw={}, legen
|
||||
|
||||
if srid is not None:
|
||||
area_correction = projected_area_factor(ax, n.srid)**2
|
||||
print(area_correction)
|
||||
sizes = [s * area_correction for s in sizes]
|
||||
|
||||
handles = make_legend_circles_for(sizes, scale, **patch_kw)
|
||||
@ -113,7 +113,9 @@ def assign_location(n):
|
||||
|
||||
|
||||
def plot_map(network, components=["links", "stores", "storage_units", "generators"],
|
||||
bus_size_factor=1.7e10, transmission=False):
|
||||
bus_size_factor=1.7e10, transmission=False, with_legend=True):
|
||||
|
||||
tech_colors = snakemake.config['plotting']['tech_colors']
|
||||
|
||||
tech_colors = snakemake.config['plotting']['tech_colors']
|
||||
|
||||
@ -174,9 +176,9 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
||||
# PDF has minimum width, so set these to zero
|
||||
line_lower_threshold = 500.
|
||||
line_upper_threshold = 1e4
|
||||
linewidth_factor = 2e3
|
||||
ac_color = "gray"
|
||||
dc_color = "m"
|
||||
linewidth_factor = 4e3
|
||||
ac_color = "rosybrown"
|
||||
dc_color = "darkseagreen"
|
||||
|
||||
if snakemake.wildcards["lv"] == "1.0":
|
||||
# should be zero
|
||||
@ -221,6 +223,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
||||
|
||||
sizes = [20, 10, 5]
|
||||
labels = [f"{s} bEUR/a" for s in sizes]
|
||||
sizes = [s/bus_size_factor*1e9 for s in sizes]
|
||||
|
||||
legend_kw = dict(
|
||||
loc="upper left",
|
||||
@ -235,7 +238,6 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
||||
ax,
|
||||
sizes,
|
||||
labels,
|
||||
scale=bus_size_factor/1e9,
|
||||
srid=n.srid,
|
||||
patch_kw=dict(facecolor="lightgrey"),
|
||||
legend_kw=legend_kw
|
||||
@ -267,15 +269,17 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
||||
frameon=False,
|
||||
)
|
||||
|
||||
colors = [tech_colors[c] for c in carriers] + [ac_color, dc_color]
|
||||
labels = carriers + ["HVAC line", "HVDC link"]
|
||||
if with_legend:
|
||||
|
||||
add_legend_patches(
|
||||
ax,
|
||||
colors,
|
||||
labels,
|
||||
legend_kw=legend_kw,
|
||||
)
|
||||
colors = [tech_colors[c] for c in carriers] + [ac_color, dc_color]
|
||||
labels = carriers + ["HVAC line", "HVDC link"]
|
||||
|
||||
add_legend_patches(
|
||||
ax,
|
||||
colors,
|
||||
labels,
|
||||
legend_kw=legend_kw,
|
||||
)
|
||||
|
||||
fig.savefig(
|
||||
snakemake.output.map,
|
||||
@ -284,7 +288,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator
|
||||
)
|
||||
|
||||
|
||||
def plot_h2_map(network):
|
||||
def plot_h2_map(network, regions):
|
||||
|
||||
tech_colors = snakemake.config['plotting']['tech_colors']
|
||||
|
||||
@ -294,6 +298,10 @@ def plot_h2_map(network):
|
||||
|
||||
assign_location(n)
|
||||
|
||||
h2_storage = n.stores.query("carrier == 'H2'")
|
||||
regions["H2"] = h2_storage.rename(index=h2_storage.bus.map(n.buses.location)).e_nom_opt.div(1e6) # TWh
|
||||
regions["H2"] = regions["H2"].where(regions["H2"] > 0.1)
|
||||
|
||||
bus_size_factor = 1e5
|
||||
linewidth_factor = 1e4
|
||||
# MW below which not drawn
|
||||
@ -356,17 +364,20 @@ def plot_h2_map(network):
|
||||
n.links.bus0 = n.links.bus0.str.replace(" H2", "")
|
||||
n.links.bus1 = n.links.bus1.str.replace(" H2", "")
|
||||
|
||||
proj = ccrs.EqualEarth()
|
||||
regions = regions.to_crs(proj.proj4_init)
|
||||
|
||||
fig, ax = plt.subplots(
|
||||
figsize=(7, 6),
|
||||
subplot_kw={"projection": ccrs.EqualEarth()}
|
||||
subplot_kw={"projection": proj}
|
||||
)
|
||||
|
||||
color_h2_pipe = '#b3f3f4'
|
||||
color_retrofit = '#54cacd'
|
||||
color_retrofit = '#499a9c'
|
||||
|
||||
bus_colors = {
|
||||
"H2 Electrolysis": "#ff29d9",
|
||||
"H2 Fuel Cell": "#6b3161",
|
||||
"H2 Fuel Cell": '#805394'
|
||||
}
|
||||
|
||||
n.plot(
|
||||
@ -391,8 +402,24 @@ def plot_h2_map(network):
|
||||
boundaries=map_opts["boundaries"]
|
||||
)
|
||||
|
||||
regions.plot(
|
||||
ax=ax,
|
||||
column="H2",
|
||||
cmap='Blues',
|
||||
linewidths=0,
|
||||
legend=True,
|
||||
vmax=10,
|
||||
vmin=0,
|
||||
legend_kwds={
|
||||
"label": "Hydrogen Storage [TWh]",
|
||||
"shrink": 0.7,
|
||||
"extend": "max",
|
||||
},
|
||||
)
|
||||
|
||||
sizes = [50, 10]
|
||||
labels = [f"{s} GW" for s in sizes]
|
||||
sizes = [s/bus_size_factor*1e3 for s in sizes]
|
||||
|
||||
legend_kw = dict(
|
||||
loc="upper left",
|
||||
@ -403,7 +430,6 @@ def plot_h2_map(network):
|
||||
)
|
||||
|
||||
add_legend_circles(ax, sizes, labels,
|
||||
scale=bus_size_factor/1e3,
|
||||
srid=n.srid,
|
||||
patch_kw=dict(facecolor='lightgrey'),
|
||||
legend_kw=legend_kw
|
||||
@ -446,6 +472,9 @@ def plot_h2_map(network):
|
||||
legend_kw=legend_kw
|
||||
)
|
||||
|
||||
plt.gca().outline_patch.set_visible(False)
|
||||
ax.set_facecolor("white")
|
||||
|
||||
fig.savefig(
|
||||
snakemake.output.map.replace("-costs-all","-h2_network"),
|
||||
bbox_inches="tight"
|
||||
@ -561,6 +590,7 @@ def plot_ch4_map(network):
|
||||
|
||||
sizes = [100, 10]
|
||||
labels = [f"{s} TWh" for s in sizes]
|
||||
sizes = [s/bus_size_factor*1e6 for s in sizes]
|
||||
|
||||
legend_kw = dict(
|
||||
loc="upper left",
|
||||
@ -575,7 +605,6 @@ def plot_ch4_map(network):
|
||||
ax,
|
||||
sizes,
|
||||
labels,
|
||||
scale=bus_size_factor/1e6,
|
||||
srid=n.srid,
|
||||
patch_kw=dict(facecolor='lightgrey'),
|
||||
legend_kw=legend_kw,
|
||||
@ -648,8 +677,8 @@ def plot_map_without(network):
|
||||
line_lower_threshold = 200.
|
||||
line_upper_threshold = 1e4
|
||||
linewidth_factor = 3e3
|
||||
ac_color = "gray"
|
||||
dc_color = "m"
|
||||
ac_color = "rosybrown"
|
||||
dc_color = "darkseagreen"
|
||||
|
||||
# hack because impossible to drop buses...
|
||||
if "EU gas" in n.buses.index:
|
||||
@ -846,6 +875,8 @@ if __name__ == "__main__":
|
||||
overrides = override_component_attrs(snakemake.input.overrides)
|
||||
n = pypsa.Network(snakemake.input.network, override_component_attrs=overrides)
|
||||
|
||||
regions = gpd.read_file(snakemake.input.regions).set_index("name")
|
||||
|
||||
map_opts = snakemake.config['plotting']['map']
|
||||
|
||||
plot_map(n,
|
||||
@ -854,7 +885,7 @@ if __name__ == "__main__":
|
||||
transmission=False
|
||||
)
|
||||
|
||||
plot_h2_map(n)
|
||||
plot_h2_map(n, regions)
|
||||
plot_ch4_map(n)
|
||||
plot_map_without(n)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user