Creé un diagrama de histograma utilizando datos de un archivo y no hay problema. Ahora quería superponer datos de otro archivo en el mismo histograma, así que hago algo como esto
n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)
pero el problema es que para cada intervalo, solo aparece la barra con el valor más alto y el otro está oculto. Me pregunto cómo podría trazar ambos histogramas al mismo tiempo con diferentes colores.
python
matplotlib
plot
histogram
Abre el camino
fuente
fuente
pyplot.hold(True)
antes de trazar, por si acaso?None
por defecto. Si desea el mismo diseño que se muestra en el gráfico, puede establecer eledgecolor
parámetro en ambos, por ejemplo, enk
(negro). El procedimiento es similar para la leyenda.pyplot.hist([x, y], bins, alpha=0.5, label=['x', 'y'])
.Las respuestas aceptadas proporcionan el código para un histograma con barras superpuestas, pero en caso de que desee que cada barra esté una al lado de la otra (como lo hice yo), intente la siguiente variación:
Referencia: http://matplotlib.org/examples/statistics/histogram_demo_multihist.html
EDITAR [2018/03/16]: actualizado para permitir el trazado de matrices de diferentes tamaños, como lo sugiere @stochastic_zeitgeist
fuente
plt.hist
para producir un archivo pdf para cada histograma? Cargué mis datos usandopandas.read_csv
y el archivo tiene 36 columnas y 100 líneas. Entonces me gustaría 100 archivos pdf.x=np.array(df.a)
yy=np.array(df.b.dropna())
básicamente terminó siendoplt.hist([x, y], weights=[np.ones_like(x)/len(x), np.ones_like(y)/len(y)])
En el caso de que tenga diferentes tamaños de muestra, puede ser difícil comparar las distribuciones con un solo eje y. Por ejemplo:
En este caso, puede trazar sus dos conjuntos de datos en diferentes ejes. Para hacerlo, puede obtener sus datos de histograma usando matplotlib, borrar el eje y luego volver a trazarlo en dos ejes separados (desplazando los bordes del contenedor para que no se superpongan):
fuente
Como un complemento a la respuesta de Gustavo Bezerra :
Si desea que cada histograma se normalice (
normed
para mpl <= 2.1 ydensity
para mpl> = 3.1 ) no puede simplemente usarlonormed/density=True
, debe establecer los pesos para cada valor:Como comparación, exactamente lo mismo
x
y losy
vectores con pesos predeterminados ydensity=True
:fuente
Debe utilizar
bins
los valores devueltos porhist
:fuente
Aquí hay un método simple para trazar dos histogramas, con sus barras una al lado de la otra, en la misma trama cuando los datos tienen diferentes tamaños:
fuente
Parece que solo quieres un gráfico de barras:
Alternativamente, puede usar subtramas.
fuente
En caso de que tenga pandas (
import pandas as pd
) o esté de acuerdo con su uso:fuente
Hay una advertencia cuando desea trazar el histograma a partir de una matriz numpy en 2-d. Necesitas intercambiar los 2 ejes.
fuente
Esta pregunta ha sido respondida anteriormente, pero quería agregar otra solución rápida / fácil que podría ayudar a otros visitantes a esta pregunta.
Aquí hay algunos ejemplos útiles para la comparación de kde vs histograma.
fuente
Inspirado por la respuesta de Salomón, pero para seguir con la pregunta, que está relacionada con el histograma, una solución limpia es:
Asegúrese de trazar primero el más alto; de lo contrario, deberá establecer plt.ylim (0,0.45) para que el histograma más alto no se corte.
fuente
También una opción que es bastante similar a la respuesta de Joaquin:
Da el siguiente resultado:
fuente