#! /usr/bin/env python3
# -*- coding:utf8 -*-
from copy import deepcopy
from lxml import etree
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
# data source: https://www.eia.gov/international/data/country/FRA/electricity/electricity-generation
years_hydro_nuclear_fossil_renew = [
[1980, [68.253, 63.424, 117.986, 1.122] ],
[1981, [70.358, 99.235, 91.393, 1.228] ],
[1982, [68.6, 102.627, 91.954, 1.644] ],
[1983, [67.515, 135.988, 75.848, 1.256] ],
[1984, [64.01, 180.47, 60.961, 1.455] ],
[1985, [60.248, 211.192, 52.251, 1.322] ],
[1986, [60.953, 239.558, 40.547, 1.403] ],
[1987, [68.623, 249.265, 37.363, 1.418] ],
[1988, [73.952, 260.287, 35.742, 1.388] ],
[1989, [45.744, 288.715, 48.492, 2.039] ],
[1990, [52.796, 298.377, 44.291, 2.203] ],
[1991, [56.277, 314.773, 56.721, 2.397] ],
[1992, [68.313, 321.523, 47.222, 2.437] ],
[1993, [64.3, 349.779, 32.276, 2.298] ],
[1994, [78.057, 341.982, 31.382, 2.494] ],
[1995, [72.196, 358.37, 35.791, 2.767] ],
[1996, [64.43, 377.473, 40.343, 2.954] ],
[1997, [63.151, 375.709, 36.181, 3.3] ],
[1998, [61.479, 368.591, 50.702, 3.314] ],
[1999, [71.832, 374.532, 46.275, 3.779] ],
[2000, [66.466, 394.404, 46.5667, 4.216] ],
[2001, [73.888, 400.018, 42.3047, 4.996] ],
[2002, [59.992, 414.922, 48.0594, 5.389] ],
[2003, [58.567, 419.017, 52.3862, 5.808] ],
[2004, [59.276, 425.829, 51.5233, 6.15] ],
[2005, [50.965, 431.18, 57.9971, 6.47] ],
[2006, [55.741, 429.82, 51.9792, 7.61] ],
[2007, [57.029, 420.129, 52.9662, 10.382] ],
[2008, [63.017, 419.8, 50.9245, 12.265] ],
[2009, [56.428, 391.753, 46.3834, 14.919] ],
[2010, [61.945, 410.086, 52.2602, 17.641] ],
[2011, [45.184, 423.509, 53.7906, 22.977] ],
[2012, [59.099, 407.438, 50.9132, 28.306] ],
[2013, [71.042, 403.7, 48.0481, 30.278] ],
[2014, [62.993, 418.001, 31.4007, 33.041] ],
[2015, [54.876, 419.022, 39.8128, 39.224] ],
[2016, [60.094, 386.453, 50.9358, 41.095] ],
[2017, [49.389, 381.846, 58.9211, 45.725] ],
[2018, [64.485, 393.2, 44.4009, 51.149] ],
[2019, [56.9824, 382.403, 48.0932, 61.6045] ] ]
[2020, [62, 335, 45, 65] ] ]
[2021, [59, 361, 48, 64] ] ]
# please update in future.
years = [row[0] for row in years_hydro_nuclear_fossil_renew]
hydro = [row[1][0] for row in years_hydro_nuclear_fossil_renew]
nuclear = [row[1][1] for row in years_hydro_nuclear_fossil_renew]
fossil = [row[1][2] for row in years_hydro_nuclear_fossil_renew]
renew = [row[1][3] for row in years_hydro_nuclear_fossil_renew]
fname = "Electricity in France.svg"
labels = {'title': {"en":"Electricity production in France",
"de":"Stromerzeugung in Frankreich",
"fr":"Production d'électricité en France",
"es":"Producción de electricidad en Francia"},
"hydro":{"en":"Hydroelectric ", "de":"Wasserkraft",
"fr":"Hydroélectricité", "es":"Hidroeléctrica"},
"nuclear":{"en":"Nuclear", "de":"Nuklear", "fr":"Nucléaire",
"es":"Nuclear"},
"fossil":{"en":"Fossil", "de":"Fossiler Kohlenstoff",
"fr":"Carbone fossile", "es":"Carbono fósil"},
"renew":{"en":"Renewable", "de":"Erneuerbar", "fr":"Renouvelable",
"es":"Renovable"} }
plt.rcParams.update({'text.usetex':False, "svg.fonttype":"none", "font.size":13})
fig = plt.figure(figsize=(680 / 90.0, 450 / 90.0), dpi=72)
plt.stackplot(years, hydro, nuclear, fossil, renew, ec='k', lw=0.5,
colors=['#0072B2', '#F0E442', '#D55E00', '#009E73'],
labels=[labels["hydro"]["en"], labels["nuclear"]["en"],
labels["fossil"]["en"], labels["renew"]["en"]])
plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(10))
plt.gca().xaxis.set_minor_locator(ticker.MultipleLocator(1))
plt.xlim(years[0], years[-1])
plt.ylim(0, 600)
plt.ylabel('TWh')
plt.title(labels["title"]["en"], fontweight='bold')
plt.grid(True)
hand, lab = plt.gca().get_legend_handles_labels()
plt.gca().legend(hand[::-1], lab[::-1], loc='upper left', borderaxespad=0.6)
plt.tight_layout()
plt.savefig(fname)
# create multilingual labels with the svg switch element
with open(fname, "r") as svgfile:
svg = etree.parse(svgfile, etree.XMLParser()).getroot()
for label, values in labels.items():
for el in svg.findall(".//{" + svg.nsmap[None] + "}text"):
if el.text == values["en"]:
switch = etree.SubElement(el.getparent(), "switch")
for lang, text in values.items():
el2 = deepcopy(el)
el2.set("systemLanguage", lang)
el2.text = text
switch.append(el2)
switch.append(el)
with open(fname, "w") as svgfile:
svgfile.write(etree.tostring(svg, pretty_print=True, encoding="unicode"))