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.

(Normalizar) o igualar un histograma con Matplotlib

¡Tengo un pequeño favor/pregunta que hacer!
Tengo alrededor de 25 de estas imágenes:
imágenes de letras

Y siempre del mismo tamaño. Estoy tratando de calcular la cantidad de espacio en blanco y negro en la imagen.

descripción de la imagen aquí

Pero en algunas va hasta 4 y en otras menos, ¡por supuesto!
Pero me encantaría normalizarlo para que el eje z siempre llegue a un número fijo.
Encontré algunas formas aquí: https://stackoverflow.com/questions/22241240/plot-a-histogram-such-that-the-total-area-of-the-histogram-equals-1-density
Pero no pude encontrar la solución que estoy buscando.
Intenté seaboard, cambiar la escala y demás.
código:

np.array(pic<em>b) #Imagen de letra
pixels</em>b = np.array(pic<em>b).flatten()
pixels_b
fig, ax = plt.subplots(figsize=(6, 8) )</em>

plt.hist(pixels_b,3, density=True)

<h1>df = sns.load_dataset('penguins') #ejemplo de datos, por supuesto</h1>

<h1>fig, ax = plt.subplots(figsize=(5, 6))</h1>

<h1>p = sns.histplot(data=df, x='longitud<em>aleta</em>mm', stat='densidad', ax=ax)</h1>

plt.show()

¿Algún consejo?
¡Muchas gracias, sé que no soy muy bueno/a!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    ¡Hola!

    Por lo que entiendo, estás buscando normalizar el histograma de los píxeles en blanco y negro de tus imágenes para que el eje z siempre llegue a un número fijo.

    Una forma de hacerlo es utilizando el parámetro weights en la función hist de matplotlib. Esto te permite especificar los pesos para cada bin en el histograma, que se pueden usar para normalizarlo.

    Aquí tienes un ejemplo de código que muestra cómo hacerlo:

    import numpy as np
    import matplotlib.pyplot as plt
    
    # Supongamos que pixels_b contiene los valores de píxeles de una de tus imágenes
    pixels_b = np.array(pic_b).flatten()
    
    # Calcula el histograma con anchos de bin fijos y pesos
    bins = np.linspace(0, 255, 256)
    weights = np.ones_like(pixels_b) / len(pixels_b) * fixed_z_limit
    hist, bins, _ = plt.hist(pixels_b, bins=bins, weights=weights)
    
    # Establece el límite en el eje y al límite z fijo
    plt.ylim(0, fixed_z_limit)
    
    plt.show()
    

    En este código, fixed_z_limit es el número fijo al que quieres que se normalice el histograma. El array weights se calcula dividiendo cada bin por el número total de píxeles y multiplicando por el límite z fijo. Esto garantiza que el área bajo el histograma sea igual al límite z fijo.

    ¡Espero que esto te sea de ayuda! Si tienes alguna pregunta adicional, no dudes en decírmelo.

Comments are closed.