en el caso de tener diferentes tamaños de muestra, puede ser difícil comparar las distribuciones de un solo eje y. Por ejemplo:
import numpy as np
import matplotlib.pyplot as plt
#makes the data
y1 = np.random.normal(-2, 2, 1000)
y2 = np.random.normal(2, 2, 5000)
colors = ['b','g']
#plots the histogram
fig, ax1 = plt.subplots()
ax1.hist([y1,y2],color=colors)
ax1.set_xlim(-10,10)
ax1.set_ylabel("Count")
plt.tight_layout()
plt.show()

En este caso, puede trazar sus dos conjuntos de datos en diferentes ejes. Para ello, puede obtener sus datos de histograma utilizando matplotlib, desactive el eje, y luego volver a terreno en dos ejes separados (el desplazamiento de los bordes de basura para que no se superpongan):
#sets up the axis and gets histogram data
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.hist([y1, y2], color=colors)
n, bins, patches = ax1.hist([y1,y2])
ax1.cla() #clear the axis
#plots the histogram data
width = (bins[1] - bins[0]) * 0.4
bins_shifted = bins + width
ax1.bar(bins[:-1], n[0], width, align='edge', color=colors[0])
ax2.bar(bins_shifted[:-1], n[1], width, align='edge', color=colors[1])
#finishes the plot
ax1.set_ylabel("Count", color=colors[0])
ax2.set_ylabel("Count", color=colors[1])
ax1.tick_params('y', colors=colors[0])
ax2.tick_params('y', colors=colors[1])
plt.tight_layout()
plt.show()

¿No sería una buena idea establecer 'pyplot.hold (True)' antes de trazar, por si acaso? – JAB
No estoy seguro de si hold (True) está configurado en my matplotlib config params o pyplot se comporta así por defecto, pero para mí el código funciona tal como está. El código se extrae de una aplicación más grande que no da ningún problema hasta el momento.De todos modos, buena pregunta que ya me hice al escribir el código – joaquin
@joaquin: ¿cómo podría especificar que x sea azul y que sea rojo? – amc