es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo hacer que mi histograma muestre barras sólidas, en su lugar muestra líneas individuales para cada punto de datos.

Soy completamente nuevo en Python y he estado intentando crear un histograma a partir de una matriz aleatoria de 200×200 utilizando numpy. A continuación, incluyo el código:

random = np.random.normal(size=(200,200)) 
print(random)
plt.hist(random, bins=10, histtype='bar')
plt.savefig('histogram.jpeg')

El gráfico que obtengo con este código se ve así:

enter image description here

No puedo hacer que el gráfico forme barras para la cantidad de intervalos y no sé por qué.

Además, necesito superponer los valores de la media, la mediana y los valores de la media +/- 1 sigma (intervalo de confianza del 68%) como líneas verticales. Sé que puedes obtener los valores de la media y la mediana usando el código a continuación, pero no estoy seguro de cómo superponer estos valores como líneas verticales.

mediana = np.median(random)
media = np.mean(random)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En primer lugar, es importante tener en cuenta que el histograma generado usando el código proporcionado es incorrecto. Esto se debe a que la función plt.hist se aplica a todo el arreglo ‘random’, lo que resulta en un histograma para todos los valores en el arreglo en lugar de para los bins individuales.

    Para solucionar este problema, podemos especificar el eje a lo largo del cual se debe calcular el histograma usando el parámetro ‘axis’. En este caso, queremos que el histograma se calcule a lo largo del arreglo aplanado (‘axis=None’). Además, podemos pasar el número de bins usando el parámetro ‘bins’. El código corregido se vería así:

    random = np.random.normal(size=(200, 200))
    plt.hist(random.flatten(), bins=10, histtype='bar')
    plt.savefig('histogram.jpeg')
    

    Esto generará un histograma con barras separadas para cada bin, como se esperaba.

    Para superponer las líneas verticales correspondientes a la media, la mediana y los valores del intervalo de confianza, podemos usar la función plt.axvline. Esta función crea una línea vertical en una posición x dada, que en nuestro caso corresponde a los valores de la media, la mediana y el intervalo de confianza. Aquí está el código actualizado:

    # Generar histograma
    random = np.random.normal(size=(200, 200))
    plt.hist(random.flatten(), bins=10, histtype='bar')
    
    # Calcular estadísticas
    mediana = np.median(random)
    media = np.mean(random)
    desviacion_estandar = np.std(random)
    ci = 1.96 * desviacion_estandar / np.sqrt(random.size)  # Intervalo de confianza del 95%
    
    # Graficar líneas verticales
    plt.axvline(media, color='red', linestyle='dashed', linewidth=1)
    plt.axvline(mediana, color='green', linestyle='dashed', linewidth=1)
    plt.axvline(media - ci, color='orange', linestyle='dashed', linewidth=1)
    plt.axvline(media + ci, color='orange', linestyle='dashed', linewidth=1)
    
    plt.savefig('histogram.jpeg')
    

    En este código, primero calculamos la mediana, la media, la desviación estándar y el intervalo de confianza del 95% utilizando las funciones de numpy. Luego usamos la función plt.axvline para graficar líneas verticales punteadas en las posiciones x correspondientes a estos valores. También especificamos el color y el grosor de cada línea.

    El histograma final con las estadísticas superpuestas debería verse algo así:

Comments are closed.