CDF plotten Matplotlib Python

Suraj Joshi 9 Januar 2021
CDF plotten Matplotlib Python

Dieses Tutorial erklärt, wie wir einen CDF-Plot mit Hilfe der Matplotlib in Python erzeugen können. CDF ist die Funktion, deren y-Werte die Wahrscheinlichkeit darstellen, dass eine Zufallsvariable die Werte kleiner oder gleich dem entsprechenden x-Wert annimmt.

CDF mit Matplotlib in Python plotten

CDF ist sowohl für kontinuierliche als auch für diskrete Wahrscheinlichkeitsverteilungen definiert. Bei kontinuierlichen Wahrscheinlichkeitsverteilungen kann die Zufallsvariable jeden beliebigen Wert aus dem angegebenen Bereich annehmen, bei diskreten Wahrscheinlichkeitsverteilungen ist jedoch nur eine bestimmte Menge von Werten möglich.

Plotten der CDF für diskrete Verteilungen mit Matplotlib in 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()

Ausgabe:

Plot CDF für diskrete Verteilung mit Matplotlib in Python

Es wird die PMF und CDF für die gegebene Verteilung geplottet. Um die y-Werte für CDF zu berechnen, verwenden wir die Methode numpy.cumsum(), um die kumulative Summe eines Arrays zu berechnen.

Wenn wir Häufigkeitszahlen erhalten, müssen wir die y-Werte zunächst normalisieren, damit sie die PDF darstellen.

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()

Ausgabe:

Plotten der CDF für die diskrete Verteilung mit Matplotlib in Python nach der Normalisierung

Hier sind uns die Häufigkeitswerte für jeden X-Wert gegeben. Wir wandeln die Häufigkeitswerte in pdf-Werte um, indem wir jedes Element des pdf-Arrays durch die Summe der Häufigkeiten dividieren. Wir verwenden dann die pdf-Werte, um die CDF-Werte zu berechnen und die CDF der gegebenen Daten darzustellen.

Wir können auch Histogramm-Diagramme verwenden, um die CDF- und PDF-Diagramme zu betrachten, was für diskrete Daten intuitiver sein wird.

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()

Ausgabe:

CDF-Darstellung für diskrete Verteilungen mit Histogramm-Darstellungen

Es werden die CDF und PDF der gegebenen Daten mit der Methode hist() gezeichnet. Um die CDF darzustellen, setzen wir cumulative=True und setzen density=True, um ein Histogramm zu erhalten, das Wahrscheinlichkeitswerte darstellt, die sich zu 1 summieren.

Plotten von CDF für kontinuierliche Verteilungen mit Matplotlib in 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()

Ausgabe:

Plotten der CDF für eine kontinuierliche Verteilung mit Matplotlib in Python

Es werden die PMF und CDF für die gegebene kontinuierliche Verteilung geplottet. Um die y-Werte für CDF zu berechnen, verwenden wir die Methode numpy.cumsum(), um die kumulative Summe eines Arrays zu berechnen.

Wir teilen y durch die Summe des Arrays y multipliziert mit dx, um die Werte zu normalisieren, so dass die CDF-Werte von 0 bis 1 reichen.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn