Plot CDF Matplotlib Python

Suraj Joshi 15 fevereiro 2024
Plot CDF Matplotlib Python

Este tutorial explica como podemos gerar um gráfico CDF utilizando o Matplotlib em Python. O CDF é a função cujos valores y representam a probabilidade de uma variável aleatória tomar os valores menores ou iguais ao valor x correspondente.

Lote CDF utilizando o Matplotlib em Python

O CDF é definido tanto para distribuições de probabilidade contínua como discreta. Na distribuição de probabilidade contínua, a variável aleatória pode tomar qualquer valor do intervalo especificado, mas na distribuição de probabilidade discreta, só podemos ter um array especificado de valores.

CDF de Plotagem para Distribuição Discreta Utilizando Matplotlib em 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()

Resultado:

Lote CDF para distribuição discreta usando Matplotlib em Python

Traça o PMF e o CDF para a distribuição em causa. Para calcular os valores y para CDF, utilizamos o método numpy.cumsum() para calcular a soma cumulativa de um array.

Se nos forem dadas contagens de frequência, devemos normalizar inicialmente os valores y de modo a que representem o 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()

Resultado:

Plot CDF para distribuição discreta utilizando Matplotlib em Python após a normalização

Aqui, são-nos dados os valores de frequência para cada valor X. Convertemos os valores de frequência em valores pdf dividindo cada elemento do array pdf pela soma das frequências. Depois utilizamos o pdf para calcular os valores CDF para traçar o CDF de determinados dados.

Podemos também utilizar os gráficos de histograma para visualizar os gráficos CDF e PDF, que serão mais intuitivos para dados discretos.

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

Resultado:

Lote CDF para distribuição discreta utilizando Histogram Plots

Traça o CDF e o PDF de determinados dados utilizando o método hist(). Para traçar o CDF, definimos cumulativo=Verdade e definimos density=True para obter um histograma representando valores de probabilidade que totalizem 1.

Plotagem CDF para distribuição contínua utilizando o Matplotlib em 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()

Resultado:

Plot CDF para distribuição contínua usando Matplotlib em Python

Traça o PMF e o CDF para a distribuição contínua dada. Para calcular os valores y para CDF, utilizamos o método numpy.cumsum() para calcular a soma cumulativa de um array.

Dividimos y pela soma do array y multiplicado pelo dx para normalizar os valores de modo a que os valores CDF variem de 0 a 1.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn