"""
From:
https://www.gov.uk/government/statistics/abortion-statistics-for-england-and-wales-2019
https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/915150/abortion-statistics-2019-data-tables.ods
Table 5: Legal abortions: gestation (weeks) by purchaser and method of
abortion, residents of England and Wales, 2019
"""
import numpy as np
import matplotlib.pyplot as plt
table = np.array([[3, 4, 2207],
[5, 5, 28556],
[6, 6, 56246],
[7, 7, 39409],
[8, 8, 28618],
[9, 9, 16025],
[10, 10, 7448],
[11, 11, 6456],
[12, 12, 5161],
[13, 13, 4442],
[14, 14, 2290],
[15, 15, 2247],
[16, 16, 1578],
[17, 17, 1526],
[18, 18, 993],
[19, 19, 859],
[20, 20, 772],
[21, 21, 834],
[22, 22, 754],
[23, 23, 684],
[24, 24, 68],
[25, 25, 42],
[26, 27, 52],
[28, 31, 72],
[32, 40, 45]])
freqs = table[:, 2]
freqs = freqs / 1000
bins = np.concatenate((table[0:1, 0], table[:, 1]))
assert len(bins) == len(freqs) + 1
widths = bins[1:] - bins[:-1]
heights = freqs/widths
heights = freqs.astype(np.float)/widths
fig, ax = plt.subplots(figsize=(4.5, 3.8))
ax.bar(bins[:-1], heights, width=widths, align='edge',
facecolor='#B2BFD9', edgecolor='#778BB2', zorder=2)
"""
Draw to match
https://en.wikipedia.org/wiki/File:Abortionmethods.png
"""
kwargs = {'xycoords': ('data', 'axes fraction'),
'horizontalalignment': 'center',
'verticalalignment': 'center'}
ax.axvspan(0, 12, color='#ACE07B')
ax.annotate('1st trimester\n(0-12 weeks)', (6, 0.93), **kwargs)
ax.axvspan(12, 28, color='#D8E370')
ax.annotate('2nd trimester\n(13-28 weeks)', (20, 0.93), **kwargs)
ax.axvspan(28, 40, color='#E1BA72')
ax.annotate('3rd trimester\n(29-40 weeks)', (34, 0.93), **kwargs)
ax.axvline(12, c='gray', lw=0.2, zorder=1)
ax.axvline(28, c='gray', lw=0.2, zorder=1)
ax.set_xlim(0, 40)
ax.set_ylim(0, 65)
ax.set_xlabel('Gestational age [weeks]')
ax.set_ylabel('Abortions (×1000)')
ax.minorticks_on()
plt.tight_layout()
plt.show()