#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
import matplotlib
matplotlib.use('agg')
from matplotlib.font_manager import FontProperties
import pylab
import sys
# (name, MJ/kg, MJ/L, [label-adjustments])
data = (
('Aluminum', 31.0, 83.8),
('Anthracite', 32.5, 72.4, {'valign': 'top'}),
('Bituminous', 24, 20, {'valign': 'center', 'x': 6.5}),
('Butanol', 36.6, 29.2, {'valign': 'center', 'x': 5}),
('Diesel', 46.2, 37.3, {'valign': 'center', 'x': 4}),
('Ethanol', 30, 24, {'valign': 'center', 'x': 5}),
('Fat Metabolism', 38, 35, {'x': -0.5}),
('Gasoline', 46.4, 34.2, {'valign': 'center', 'x': 5}),
('Gasohol E85', 33.1, 25.65, {'valign': 'center', 'x': 7.5}),
('Glucose', 15.55, 23.9, {'valign': 'center', 'x': 5}),
('Hydrazine', 19.5, 19.3, {'valign': 'center', 'x': -6.5}),
('Hydrogen Gas', 143, 0.01079),
('Hydrogen Gas (700 bar)', 143, 5.6),
('Iron', 5.2, 40.68), # (burned to Fe2O3)
('Kerosene', 42.8, 33, {'valign': 'top'}),
('Liquid Ammonia', 18.6, 11.5, {'valign': 'center', 'x': 9.5}),
('Liquid Hydrogen', 143, 10.1),
('Liquid Natural Gas', 53.6, 22.2, {'valign': 'center', 'x': 10.5}),
('Lithium', 43.1, 23.0, {'valign': 'top'}),
('Lithium Borohydride', 65.2, 43.4),
('LPG Propane', 49.6, 25.3, {'valign': 'center', 'x': 8}),
('LPG Butane', 49.1, 27.7, {'valign': 'center', 'x': 7}),
('Magnesium', 24.7, 43.0),
('Methanol', 19.7, 15.6, {'valign': 'center', 'x': 6}),
('Natural Gas', 53.6, 0.0364),
('Natural Gas (250 bar)', 53.6, 9),
('Polyester', 26.0, 35.6, {'valign': 'top'}),
('Polyethylene', 46.3, 42.6, {'valign': 'center', 'x': 7.5}),
('Polystyrene', 41.4, 43.5),
('Silicon', 32.6, 75.9),
('Sodium', 13.3, 12.8), # (burned to wet NaOH)
('Sugar Metabolism', 17, 26.2),
('Zinc', 5.3, 38.0, {'valign': 'top'}),
('Zinc–Air Battery', 1.59, 6.02, {'valign': 'center', 'x': 9}),
# 0.54-0.72, 0.9-1.9 (values used are from the Li-Ion battery article)
('Lithium-Ion Battery', 0.576, 0.972, {'valign': 'center', 'x': 11}),
)
font12 = FontProperties(family=['sans-serif'], size=12)
font10 = FontProperties(family=['sans-serif'], size=10)
font8 = FontProperties(family=['sans-serif'], size=8)
pylab.rcParams.update({'figure.figsize': [12, 7.5]})
fig=pylab.figure(1)
ax=pylab.axes([0.05, 0.05, 0.95 - 0.05, 0.95 - 0.05])
ax.set_axisbelow(True)
for v in data:
# (name, MJ/kg, MJ/L, label-adjustments)
label = v[0]
x = v[1]
y = v[2]
if len(v) < 4:
halign = 'center'
valign = 'bottom'
x_text = x
y_text = y + 0.9
else:
halign = v[3].get('halign', 'center')
valign = v[3].get('valign', 'bottom')
x_text = x + v[3].get('x', 0)
y_text = y + v[3].get('y', 0)
if valign == 'bottom':
y_text += 0.9
elif valign == 'top':
y_text -= 0.9
pylab.scatter(x=[x], y=[y], c='b', edgecolors='black')
pylab.text(x=x_text, y=y_text, s=label,
horizontalalignment=halign,
verticalalignment=valign,
fontproperties=font10)
pylab.title('Selected Energy Densities',
fontproperties=font12)
pylab.ylabel('MJ/L', fontproperties=font10)
pylab.xlabel('MJ/kg', fontproperties=font10)
pylab.xticks(fontproperties=font8)
pylab.yticks(fontproperties=font8)
ax.grid(linestyle='dashed')
ax.tick_params(axis="y", direction="in")
ax.tick_params(axis="x", direction="in")
ax.xaxis.grid(True)
ax.yaxis.grid(True)
pylab.xlim(0, 160)
pylab.ylim(0, 90)
pylab.savefig('energy_density.svg', transparent=True)