¿Cómo hacer una curva de campana en Python?

Una curva en forma de campana en estadística corresponde a una distribución normal o una distribución gaussiana que lleva el nombre del matemático alemán Carl Friedrich Gauss. En una distribución normal, los puntos se concentran en los valores medios y la mayoría de los puntos se encuentran cerca de la media. La orientación de la curva de campana depende de los valores de media y desviación estándar de un conjunto dado de puntos de entrada. Al cambiar el valor de la media, podemos cambiar la ubicación de la curva en el eje y la forma de la curva se puede manipular cambiando los valores de desviación estándar. En este artículo, aprenderemos a trazar una curva de campana en Python.

En una distribución normal, la media, la mediana y la moda son todas iguales y la curva en forma de campana es simétrica con respecto a la media, es decir, el eje y. La función de densidad de probabilidad para una distribución normal se calcula mediante la fórmula:

f(x,\mu,\sigma ) = \frac{1}{\sigma\sqrt{2\pi}} \times e^{\frac{-1}{2}\times(\frac{x-u}{\sigma})^2}

Dónde: 

x = puntos de entrada,

\mu = mean

\sigma = standard deviation of the set of input values

Ejemplo 1: Creación de una curva de campana simple.

Enfoque: Haremos una lista de puntos en el eje x y pasaremos estos puntos dentro de nuestra función pdf personalizada para generar una función de distribución de probabilidad para producir valores y correspondientes a cada punto en x. Ahora trazamos la curva usando los métodos plot() y scatter() que están disponibles en la biblioteca matplotlib. El método plot() se usa para hacer un diagrama de líneas y el método scatter() se usa para crear puntos punteados dentro del gráfico.

Código:

Python

# Importing libraries
import numpy as np
import matplotlib.pyplot as plt
  
# A custom function to calculate
# probability distribution function
def pdf(x):
    mean = np.mean(x)
    std = np.std(x)
    y_out = 1/(std * np.sqrt(2 * np.pi)) * np.exp( - (x - mean)**2 / (2 * std**2))
    return y_out
    
# To generate an array of x-values
x = np.arange(-2, 2, 0.1)
  
# To generate an array of
# y-values using corresponding x-values
y = pdf(x)
  
# Plotting the bell-shaped curve
plt.style.use('seaborn')
plt.figure(figsize = (6, 6))
plt.plot(x, y, color = 'black',
         linestyle = 'dashed')
  
plt.scatter( x, y, marker = 'o', s = 25, color = 'red')
plt.show()

Producción:

curva en forma de campana

Ejemplo 2: Rellene el área bajo la curva de campana.

También podemos rellenar el área debajo de la curva de campana, para eso vamos a usar la función fill_between() presente en la biblioteca matplotlib para colorear el área entre dos curvas.  

La función fill_ between() acepta múltiples parámetros, como valores x, valores y, que son coordenadas de puntos y líneas en el gráfico. Además, admite algunos parámetros específicos del gráfico, como ‘alfa’, que decide la opacidad del color y el atributo ‘color’ acepta el nombre del color para llenar debajo de la curva.

Enfoque: Tomamos una lista de puntos en el eje x y pasamos estos puntos dentro de nuestra función pdf personalizada para generar una función de distribución de probabilidad para producir valores y correspondientes a cada punto en x. De manera similar, para completar el área bajo la curva, seleccionamos un rango de valores de x_fill y también generamos una distribución de probabilidad. Ahora trazamos la curva primero usando el método plot() y scatter() y llenamos el área debajo de la curva con el método fill_ between().

Código:

Python

# Importing libraries
import numpy as np
import matplotlib.pyplot as plt
  
# A custom function to calculate
# probability distribution function
def pdf(x):
    mean = np.mean(x)
    std = np.std(x)
    y_out = 1/(std * np.sqrt(2 * np.pi)) * np.exp( - (x - mean)**2 / (2 * std**2))
    return y_out
  
# To generate an array of x-values
x = np.arange(-2, 2, 0.1)
  
# To generate an array of 
# y-values using corresponding x-values
y = pdf(x)
  
# To fill in values under the bell-curve
x_fill = np.arange(-2, 2, 0.1)
y_fill = pdf(x_fill)
  
# Plotting the bell-shaped curve
plt.style.use('seaborn')
plt.figure(figsize = (6, 6))
plt.plot(x, y, color = 'black',
         linestyle = 'dashed')
  
plt.scatter(x, y, marker = 'o',
            s = 25, color = 'red')
  
plt.fill_between(x_fill, y_fill, 0,
                 alpha = 0.2, color = 'blue')
plt.show()

Producción:

Gráfico que muestra el área llena debajo de la curva de campana

Publicación traducida automáticamente

Artículo escrito por saurabh48782 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *