graficas - ¿Cómo trazar un histograma usando Matplotlib en Python con una lista de datos?
histograma en python (3)
Esta es una forma muy práctica de hacerlo, pero si desea hacer un histograma donde ya conozca los valores bin pero no tiene los datos de origen, puede usar la función
np.random.randint
para generar el número correcto de valores dentro del rango de cada bin para la función hist para graficar, por ejemplo:
import numpy as np
import matplotlib.pyplot as plt
data = [np.random.randint(0, 9, *desired y value*), np.random.randint(10, 19, *desired y value*), etc..]
plt.hist(data, histtype=''stepfilled'', bins=[0, 10, etc..])
En cuanto a las etiquetas, puede alinear x ticks con contenedores para obtener algo como esto:
#The following will align labels to the center of each bar with bin intervals of 10
plt.xticks([5, 15, etc.. ], [''Label 1'', ''Label 2'', etc.. ])
Estoy tratando de trazar un histograma usando la función
matplotlib.hist()
pero no estoy seguro de cómo hacerlo.
Tengo una lista
probability = [0.3602150537634409, 0.42028985507246375,
0.373117033603708, 0.36813186813186816, 0.32517482517482516,
0.4175257731958763, 0.41025641025641024, 0.39408866995073893,
0.4143222506393862, 0.34, 0.391025641025641, 0.3130841121495327,
0.35398230088495575]
y una lista de nombres (cadenas).
¿Cómo hago la probabilidad como mi valor y de cada barra y los nombres como valores x?
Si aún no ha instalado matplotlib, simplemente pruebe el comando.
> pip install matplotlib
Importar biblioteca
import matplotlib.pyplot as plot
Los datos del histograma:
plot.hist(weightList,density=1, bins=20)
plot.axis([50, 110, 0, 0.06])
#axis([xmin,xmax,ymin,ymax])
plot.xlabel(''Weight'')
plot.ylabel(''Probability'')
Mostrar histograma
plot.show()
Y la salida es como:
Si desea un histograma, no necesita adjuntar ningún ''nombre'' a los valores de x, ya que en el eje x tendría contenedores:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, normed=True, bins=30)
plt.ylabel(''Probability'');
Sin embargo, si tiene un número limitado de puntos de datos y desea un diagrama de barras, puede adjuntar etiquetas al eje x:
x = np.arange(3)
plt.bar(x, height= [1,2,3])
plt.xticks(x+.5, [''a'',''b'',''c''])
Avísame si esto resuelve tu problema.
EDITAR 26 de noviembre de 2018
Según el comentario a continuación, el siguiente código será suficiente a partir de Matplotlib 3.0.2:
x = np.arange(3)
plt.bar(x, height= [1,2,3])
plt.xticks(x, [''a'',''b'',''c'']) # no need to add .5 anymore
EDITAR 23 de mayo de 2019
En lo que respecta al histograma, el parámetro
normed
está en desuso:
MatplotlibDeprecationWarning: El kwarg ''normalizado'' quedó en desuso en Matplotlib 2.1 y se eliminará en 3.1. Use ''densidad'' en su lugar.
Entonces, a partir de
Matplolib 3.1
lugar de:
plt.hist(x, normed=True, bins=30)
uno tiene que escribir:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, density=True, bins=30) # density
plt.ylabel(''Probability'');