from scipy.special import comb
import numpy as np
import matplotlib.pyplot as plt


n = 100
p = 0.5
P = []
C = []

X = range(n+1)
for i in X:
    P.append(comb(n,i) * (p**i) * ((1-p)**(n-i)))
C.append(P[0])
for i in range(1, n+1):
    C.append(C[i-1] + P[i])

plt.figure('Probability Distribution')
plt.bar(X, P, 0.8)
x_axis = range(len(X))
y_axis = np.arange(0, max(P)+0.02, 0.02)
plt.xticks(x_axis)
plt.yticks(y_axis)
plt.xlabel('x')
plt.ylabel('Pr[X=x]')
plt.title('Binomial PDF with n=%d and p=%.2f' %(n, p))

if(1):
    plt.figure('Cumulative Distribution')
    plt.plot(X, C)
    x_axis = np.arange(len(X))
    y_axis = np.arange(0, 1.1, 0.1)
    plt.xticks(x_axis)
    plt.yticks(y_axis)
    plt.xlabel('x')
    plt.ylabel('Pr[X<=x]')
    plt.title('Binomial CDF with n=%d and p=%.2f' %(n, p))
    
plt.grid()
plt.show()
