"""
From:
https://www.cdc.gov/mmwr/volumes/68/ss/ss6811a1.htm
TABLE 7. Reported abortions, by known weeks of gestation and reporting area of
occurrence — selected reporting areas, United States, 2016
TABLE 9. Reported abortions obtained at ≤13 weeks’ gestation, by weeks of
gestation and reporting area of occurrence — selected reporting areas,
United States, 2016
It says ≤6, and ≤13, so I assume the "7 weeks" bin is (6, 7], for instance.
It says 18–20 and ≥21, though, which I assume means (20, 40].
"""
import numpy as np
import matplotlib.pyplot as plt
table = np.array([[0, 6, 148369],
7, 7, 76293],
8, 8, 58030],
9, 9, 39653],
10, 10, 24280],
11, 11, 19742],
12, 12, 14680],
13, 13, 11770],
14, 15, 15602],
16, 17, 9089],
18, 20, 8454],
21, 40, 5303]])
freqs = table[:, 2
freqs = freqs / 1000
bins = np.concatenate((table0:1, 0], table[:, 1]))
assert len(bins) == len(freqs) + 1
widths = bins1:] - 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
/info/en/?search=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, 90)
ax.set_xlabel('Gestational age [weeks]')
ax.set_ylabel('Abortions (×1000)')
ax.minorticks_on()
plt.tight_layout()
plt.show()