view talk/code/plots.py @ 46:7887a0b32539

put the two boxplots above each other
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Sat, 14 May 2016 23:28:59 -0400
parents 6daaf6a8e431
children 1baa6b0a7199
line wrap: on
line source

import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import numpy as np

with open("../../data/men") as f:
    men = [float(x) for x in f.readlines()]

with open("../../data/women") as f:
    women = [float(x) for x in f.readlines()]

men_stats = cbook.boxplot_stats(men)
women_stats = cbook.boxplot_stats(women)

fig = plt.figure(figsize=(12,8))

# setup the figure and axes
bpAx = fig.add_axes([0.05, 0.8, 0.9, 0.1])   # left, bottom, width, height:
                                            # (adjust as necessary)
histAx = fig.add_axes([0.05, 0.55, 0.9, 0.25]) # left specs should match and
                                            # bottom + height on this line should
                                            # equal bottom on bpAx line
# plot stuff
bpAx.bxp(men_stats, vert=False, flierprops={"marker": 'x'})
histAx.hist(men, bins=0.5 + np.arange(0,100), color=[0.3, 0.3, 1])


# confirm that the axes line up
xlims = np.array([bpAx.get_xlim(), histAx.get_xlim()])
for ax in [bpAx, histAx]:
    ax.set_xlim([xlims.min(), xlims.max()])

bpAx.set_xticklabels([])  # clear out overlapping xlabels
bpAx.set_yticks([])  # don't need that 1 tick mark
bpAx.set_title("Ages of actors",fontsize=20)

histAx.set_xticks(np.arange(5,105,5))
histAx.get_xaxis().tick_bottom()
bpAx.get_xaxis().tick_top()



# setup the figure and axes
bpAx = fig.add_axes([0.05, 0.35, 0.9, 0.1])   # left, bottom, width, height:
                                            # (adjust as necessary)
histAx = fig.add_axes([0.05, 0.1, 0.9, 0.25]) # left specs should match and
                                            # bottom + height on this line should
                                            # equal bottom on bpAx line
# plot stuff
bpAx.bxp(women_stats, vert=False, flierprops={"marker": 'x'})
histAx.hist(women, bins=0.5 + np.arange(0,100), color='pink')

# confirm that the axes line up
xlims = np.array([bpAx.get_xlim(), histAx.get_xlim()])
for ax in [bpAx, histAx]:
    ax.set_xlim([xlims.min(), xlims.max()])

bpAx.set_xticklabels([])  # clear out overlapping xlabels
bpAx.set_yticks([])  # don't need that 1 tick mark
bpAx.set_title("Ages of actresses", fontsize=20)

histAx.set_xticks(np.arange(5,105,5))
histAx.get_xaxis().tick_bottom()
bpAx.get_xaxis().tick_top()

plt.savefig("boys-and-girls.pdf")