Estoy tratando de trazar un histograma usando la matplotlib.hist()
función 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?
python
matplotlib
visualization
data-visualization
DataVizGuys
fuente
fuente
Si aún no ha instalado matplotlib, intente con el comando.
Importación de biblioteca
Los datos del histograma:
Mostrar histograma
Y la salida es como:
fuente
Aunque la pregunta parece exigir trazar un histograma usando la
matplotlib.hist()
función, podría decirse que no se puede hacer usando lo mismo, ya que la última parte de la pregunta exige usar las probabilidades dadas como los valores y de las barras y los nombres de pila (cadenas) como el valores x.Estoy asumiendo una lista de muestra de nombres que corresponden a probabilidades dadas para dibujar la trama. Un diagrama de barras simple sirve aquí para el problema dado. Se puede utilizar el siguiente código:
fuente
Esta es una pregunta antigua, pero ninguna de las respuestas anteriores ha abordado el problema real, es decir, el hecho de que el problema está en la pregunta en sí.
Primero, si las probabilidades ya se han calculado, es decir, los datos agregados del histograma están disponibles de manera normalizada, entonces las probabilidades deben sumar 1. Obviamente no es así y eso significa que algo anda mal aquí, ya sea con la terminología o con los datos. o en la forma en que se hace la pregunta.
En segundo lugar, el hecho de que se proporcionen las etiquetas (y no los intervalos) normalmente significaría que las probabilidades son de una variable de respuesta categórica, y lo mejor es utilizar un gráfico de barras para trazar el histograma (o alguna piratería del método hist del pyplot), La respuesta de Shayan Shafiq proporciona el código.
Sin embargo, vea el problema 1, esas probabilidades no son correctas y usar un diagrama de barras en este caso como "histograma" sería incorrecto porque no cuenta la historia de la distribución univariante, por alguna razón (quizás las clases se superponen y las observaciones se cuentan múltiples veces?) y dicho gráfico no debería llamarse histograma en este caso.
El histograma es, por definición, una representación gráfica de la distribución de una variable univariante (consulte https://www.itl.nist.gov/div898/handbook/eda/section3/histogra.htm , https://en.wikipedia.org/wiki / Histograma) y se crea dibujando barras de tamaños que representan recuentos o frecuencias de observaciones en clases seleccionadas de la variable de interés. Si la variable se mide en una escala continua, esas clases son contenedores (intervalos). Una parte importante del procedimiento de creación del histograma es elegir cómo agrupar (o mantener sin agrupar) las categorías de respuestas para una variable categórica, o cómo dividir el dominio de valores posibles en intervalos (dónde poner los límites del contenedor) para continuos. tipo de variable. Todas las observaciones deben estar representadas y cada una solo una vez en la trama. Eso significa que la suma de los tamaños de las barras debe ser igual al recuento total de observación (o sus áreas en el caso de los anchos variables, que es un enfoque menos común). O, si el histograma está normalizado, todas las probabilidades deben sumar 1.
Si los datos en sí son una lista de "probabilidades" como respuesta, es decir, las observaciones son valores de probabilidad (de algo) para cada objeto de estudio, entonces la mejor respuesta es simplemente
plt.hist(probability)
con la opción quizás de agrupamiento, y el uso de etiquetas x ya disponibles es suspicaz.Entonces el diagrama de barras no debe usarse como histograma, sino simplemente
con los resultados
matplotlib en tal caso llega por defecto con los siguientes valores de histograma
el resultado es una tupla de matrices, la primera matriz contiene recuentos de observaciones, es decir, lo que se mostrará contra el eje y del gráfico (suman 13, número total de observaciones) y la segunda matriz son los límites de intervalo para x -eje.
Se puede comprobar que estén igualmente espaciados,
O, por ejemplo, para 3 contenedores (mi juicio requiere 13 observaciones) uno obtendría este histograma
con los datos de la trama "detrás de las rejas" siendo
El autor de la pregunta debe aclarar cuál es el significado de la lista de valores de "probabilidad": la "probabilidad" es solo un nombre de la variable de respuesta (entonces, ¿por qué hay etiquetas x listas para el histograma? No tiene sentido ), o son los valores de la lista las probabilidades calculadas a partir de los datos (entonces el hecho de que no sumen 1 no tiene sentido).
fuente
Esta es una forma muy completa de hacerlo, pero si desea hacer un histograma en el que ya conoce los valores de bin pero no tiene los datos de origen, puede usar la
np.random.randint
función para generar el número correcto de valores dentro del rango de cada bin para graficar la función hist, por ejemplo:en cuanto a las etiquetas, puede alinear x ticks con bins para obtener algo como esto:
fuente