#! /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 = row0 for row in years_hydro_nuclear_fossil_renew
hydro = row1][0 for row in years_hydro_nuclear_fossil_renew
nuclear = row1][1 for row in years_hydro_nuclear_fossil_renew
fossil = row1][2 for row in years_hydro_nuclear_fossil_renew
renew = row1][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(years0], 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.nsmapNone + "}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"))