Plot CDF Matplotlib Python

Suraj Joshi 15 février 2024
Plot CDF Matplotlib Python

Ce tutoriel explique comment nous pouvons générer un tracé de CDF en utilisant Matplotlib en Python. CDF est la fonction dont les valeurs y représentent la probabilité qu’une variable aléatoire prenne des valeurs inférieures ou égales à la valeur x correspondante.

Tracer une CDF en utilisant Matplotlib en Python

La CDF est définie pour des distributions de probabilité à la fois continues et discrètes. Dans la distribution de probabilités continue, la variable aléatoire peut prendre n’importe quelle valeur de la plage spécifiée, mais dans la distribution de probabilités discrète, nous ne pouvons avoir qu’un ensemble de valeurs spécifiées.

Tracer la CDF pour une distribution discrète en utilisant Matplotlib en Python

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 7)
y = [0.2, 0.1, 0.1, 0.2, 0.1, 0.3]
cdf = np.cumsum(y)

plt.plot(x, y, marker="o", label="PMF")
plt.plot(x, cdf, marker="o", label="CDF")
plt.xlim(0, 7)
plt.ylim(0, 1.5)
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for discrete distribution")
plt.legend()
plt.show()

Production :

Tracé CDF pour une distribution discrète en utilisant Matplotlib en Python

Il trace le PMF et le CDF pour la distribution donnée. Pour calculer les valeurs y de CDF, nous utilisons la méthode numpy.cumsum() pour calculer la somme cumulative d’un tableau.

Si on nous donne des comptes de fréquence, nous devons normaliser les valeurs y initialement pour qu’elles représentent le PDF.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 7)
frequency = np.array([3, 8, 4, 5, 3, 6])
pdf = frequency / np.sum(frequency)
cdf = np.cumsum(pdf)

plt.plot(x, pdf, marker="o", label="PMF")
plt.plot(x, cdf, marker="o", label="CDF")
plt.xlim(0, 7)
plt.ylim(0, 1.5)
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for discrete distribution")
plt.legend()
plt.show()

Production :

Tracer le CDF pour une distribution discrète en utilisant Matplotlib en Python après normalisation

Ici, on nous donne les valeurs de fréquence pour chaque valeur X. Nous convertissons les valeurs de fréquence en valeurs pdf en divisant chaque élément du tableau pdf par la somme des fréquences. Nous utilisons ensuite le pdf pour calculer les valeurs CDF pour tracer le CDF des données données données.

Nous pouvons également utiliser des histogrammes pour visualiser les tracés de la CDF et de la PDF, ce qui sera plus intuitif pour les données discrètes.

import numpy as np
import matplotlib.pyplot as plt

data = [3, 4, 2, 3, 4, 5, 4, 7, 8, 5, 4, 6, 2, 1, 0, 9, 7, 6, 6, 5, 4]
plt.hist(data, bins=9, density=True)
plt.hist(data, bins=9, density=True, cumulative=True, label="CDF", histtype="step")
plt.xlabel("X")
plt.ylabel("Probability")
plt.xticks(np.arange(0, 10))
plt.title("CDF using Histogram Plot")
plt.show()

Production :

Tracer la CDF pour une distribution discrète en utilisant des tracés d’histogramme

Il trace le CDF et le PDF de données données en utilisant la méthode hist(). Pour tracer la CDF, nous définissons cumulative=True et nous définissons density=True pour obtenir un histogramme représentant les valeurs de probabilité qui s’additionnent à 1.

Tracer la CDF pour une distribution continue en utilisant Matplotlib en Python

import numpy as np
import matplotlib.pyplot as plt

dx = 0.005
x = np.arange(-10, 10, dx)
y = 0.25 * np.exp((-(x ** 2)) / 8)

y = y / (np.sum(dx * y))
cdf = np.cumsum(y * dx)

plt.plot(x, y, label="pdf")
plt.plot(x, cdf, label="cdf")
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for continuous distribution")
plt.legend()
plt.show()

Production :

Tracé CDF pour une distribution continue en utilisant Matplotlib en Python

Il trace le PMF et le CDF pour la distribution continue donnée. Pour calculer les valeurs y de CDF, nous utilisons la méthode numpy.cumsum() pour calculer la somme cumulative d’un tableau.

Nous divisons y par la somme du tableau y multipliée par dx pour normaliser les valeurs de sorte que les valeurs de CDF soient comprises entre 0 et 1.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn