tutorial - python trazar histograma simple dado datos agrupados
plt.hist density (6)
¡Genial, gracias! Esto es lo que creo que OP deseaba hacer:
import random
import matplotlib.pyplot as plt
x=[x/1000 for x in random.sample(range(100000),100)]
xbins=range(0,len(x))
plt.hist(x, bins=xbins, color=''blue'')
plt.show()
Tengo datos de recuento (100 de ellos), cada uno corresponde a un contenedor (0 a 99). Necesito trazar estos datos como un histograma. Sin embargo, el histograma cuenta esos datos y no traza correctamente porque mis datos ya están agrupados.
import random
import matplotlib.pyplot as plt
x = random.sample(range(1000), 100)
xbins = [0, len(x)]
#plt.hist(x, bins=xbins, color = ''blue'')
#Does not make the histogram correct. It counts the occurances of the individual counts.
plt.plot(x)
#plot works but I need this in histogram format
plt.show()
Eche un vistazo a los examples histograma en la documentación de matplotlib. Deberías usar la función documentation . Si de forma predeterminada no da el resultado que espera, entonces juegue con los argumentos para hist
y prepare / transform / modify sus datos antes de proporcionarlo a hist
. No tengo muy claro qué es lo que quieres lograr, así que no puedo ayudarte en este punto.
El problema es con tus xbins. Tu Actualmente tienes
xbins = [0, len(x)]
que te dará la lista [0, 100]. Esto significa que solo verá 1 bin (no 2) delimitado por debajo por 0 y más por 100. No estoy totalmente seguro de lo que quiere de su histograma. Si desea tener 2 contenedores espaciados desigualmente, puede usar
xbins = [0, 100, 1000]
para mostrar todo debajo de 100 en un contenedor, y todo lo demás en el otro contenedor. Otra opción sería usar un valor entero para obtener una cierta cantidad de contenedores espaciados uniformemente. En otras palabras, hazlo
plt.hist(x, bins=50, color=''blue'')
donde los contenedores es el número de contenedores deseados.
En una nota lateral, cada vez que no puedo recordar cómo hacer algo con matplotlib, usualmente solo voy a la galería de miniaturas y encuentro un ejemplo que parece más o menos lo que estoy tratando de lograr. Todos estos ejemplos tienen un código fuente que los acompaña, por lo que son bastante útiles. La documentation para matplotlib también puede ser muy útil.
Estoy bastante seguro de que tu problema son los contenedores. No es una lista de límites sino una lista de bordes de contenedores.
xbins = [0,len(x)]
devuelve en su caso una lista que contiene [0, 100]
que indica que quiere un borde de contenedor en 0 y uno en 100. Por lo tanto, obtiene un contenedor de 0 a 100. Lo que quiere es:
xbins = [x for x in range(len(x))]
Que devuelve:
[0,1,2,3, ... 99]
Lo que indica los bordes del cubo que desea.
Si entiendo lo que quiere lograr correctamente, lo siguiente debería darle lo que desea:
import matplotlib.pyplot as plt
plt.bar(range(0,100), x)
plt.show()
No usa hist()
, pero parece que ya has puesto tus datos en contenedores, por lo que no es necesario.
Usted puede lograr esto usando hist de matplotlib también, sin necesidad de numpy. En esencia, ya has creado los contenedores como xbins
. En este caso, x
serán tus pesos.
plt.hist(xbins,weights=x)