Skip to content

Instantly share code, notes, and snippets.

@arimitramaiti
Created July 2, 2020 08:14
Show Gist options
  • Save arimitramaiti/9f3b045cebc31b7bffa27c1c719206c6 to your computer and use it in GitHub Desktop.
Save arimitramaiti/9f3b045cebc31b7bffa27c1c719206c6 to your computer and use it in GitHub Desktop.
An example to illustrate continuous distributions
##import required modules
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math
from matplotlib.ticker import StrMethodFormatter
###Python-Graph-1 in article titled Jump from discrete to a continuous distribution
##Create the grid
fig, axes = plt.subplots(2, 2, figsize=(10,8))
fig.subplots_adjust(top=0.7)
#Top left chart
axes[0,0].scatter(x=np.arange(10.0,16.0,1.0), y=np.ones(6))
axes[0,0].set_xlim(9,16,1)
axes[0,0].set_ylim(0.5,1.5,0.5)
axes[0,0].xaxis.set(ticks=range(10,16))
axes[0,0].xaxis.set_major_formatter(StrMethodFormatter('{x:,.1f}'))
axes[0,0].spines['top'].set_visible(False)
# axes[0,0].spines['right'].set_visible(False)
axes[0,0].spines['left'].set_visible(False)
axes[0,0].spines['bottom'].set_visible(False)
axes[0,0].axes.get_yaxis().set_visible(False)
axes[0,0].set_title('1-This can be a continuum', fontsize=14)
axes[0,0].set_xlabel('Possible values of X', fontsize=11, weight='bold')
#Top right chart
axes[0,1].scatter(x=np.arange(10.0,15.5,0.5), y=np.ones(11))
axes[0,1].set_xlim(9.5,15.5,0.5)
axes[0,1].set_ylim(0.5,1.5,0.5)
axes[0,1].xaxis.set(ticks=range(10,16))
axes[0,1].xaxis.set_major_formatter(StrMethodFormatter('{x:,.1f}'))
axes[0,1].spines['top'].set_visible(False)
axes[0,1].spines['right'].set_visible(False)
# axes[0,1].spines['left'].set_visible(False)
axes[0,1].spines['bottom'].set_visible(False)
axes[0,1].axes.get_yaxis().set_visible(False)
axes[0,1].set_title('2-This can be a continuum', fontsize=14)
axes[0,1].set_xlabel('Possible values of X', fontsize=11, weight='bold')
#Bottom left chart
axes[1,0].scatter(x=np.arange(10.0,15.25,0.25), y=np.ones(21))
axes[1,0].set_xlim(9.5,15.25,0.25)
axes[1,0].set_ylim(0.5,1.5,0.5)
axes[1,0].xaxis.set(ticks=range(10,16))
axes[1,0].xaxis.set_major_formatter(StrMethodFormatter('{x:,.1f}'))
axes[1,0].spines['top'].set_visible(False)
# axes[1,0].spines['right'].set_visible(False)
axes[1,0].spines['left'].set_visible(False)
axes[1,0].spines['bottom'].set_visible(False)
axes[1,0].axes.get_yaxis().set_visible(False)
axes[1,0].set_title('3-This can be a continuum', fontsize=14)
axes[1,0].set_xlabel('Possible values of X', fontsize=11, weight='bold')
#Bottom right chart
axes[1,1].scatter(x=np.arange(10.0,15.10,0.10), y=np.ones(51))
axes[1,1].set_xlim(9.5,15.10,0.10)
axes[1,1].set_ylim(0.5,1.5,0.5)
axes[1,1].xaxis.set(ticks=range(10,16))
axes[1,1].xaxis.set_major_formatter(StrMethodFormatter('{x:,.1f}'))
axes[1,1].spines['top'].set_visible(False)
axes[1,1].spines['right'].set_visible(False)
# axes[1,1].spines['left'].set_visible(False)
axes[1,1].spines['bottom'].set_visible(False)
axes[1,1].axes.get_yaxis().set_visible(False)
axes[1,1].set_title('4-This can be a continuum', fontsize=14)
axes[1,1].set_xlabel('Possible values of X', fontsize=11, weight='bold')
fig.tight_layout()
plt.show()
###Python-Graph-2 in article titled Jump from discrete to a continuous distribution
##Create the grid
##This data is used for left chart
mean1 = 0
mean2 = 1
mean3 = -1
variance = 1
sigma = math.sqrt(variance)
x1 = np.linspace(mean1 - 3*sigma, mean1 + 3*sigma, 100)
x2 = np.linspace(mean2 - 3*sigma, mean2 + 3*sigma, 100)
x3 = np.linspace(mean3 - 3*sigma, mean3 + 3*sigma, 100)
##This data is used for left chart
##This data is used for right chart
variance1 = 2
sigma1 = math.sqrt(variance1)
variance2 = 3
sigma2 = math.sqrt(variance2)
x4 = np.linspace(mean1 - 3*sigma, mean1 + 3*sigma, 100)
x5 = np.linspace(mean1 - 3*sigma1, mean1 + 3*sigma1, 100)
x6 = np.linspace(mean1 - 3*sigma2, mean1 + 3*sigma2, 100)
##This data is used for right chart
fig, axes = plt.subplots(1, 2, figsize=(12,5))
fig.subplots_adjust(top=0.7)
#Left chart
axes[0].plot(x1, stats.norm.pdf(x1, mean1, sigma), label=["Mean:0, SD:1"])
axes[0].plot(x2, stats.norm.pdf(x2, mean2, sigma), label=["Mean:1, SD:1"])
axes[0].plot(x3, stats.norm.pdf(x3, mean3, sigma), label=["Mean:-1, SD:1"])
axes[0].legend(loc='best', shadow=True,fontsize='medium')
axes[0].spines['top'].set_visible(False)
axes[0].spines['right'].set_visible(False)
axes[0].spines['left'].set_visible(False)
axes[0].set_title('Change in Mean', fontsize=14)
axes[0].set_xlabel('Z-Score', fontsize=11, weight='bold')
axes[0].axes.get_yaxis().set_visible(False)
axes[0].axvline(x=0, color='black', linestyle='dashed', linewidth=1)
#Right chart
axes[1].plot(x4, stats.norm.pdf(x4, mean1, sigma), label=["Mean:0, SD:1"])
axes[1].plot(x5, stats.norm.pdf(x5, mean1, sigma1), label=["Mean:0, SD:1.4"])
axes[1].plot(x6, stats.norm.pdf(x6, mean1, sigma2), label=["Mean:0, SD:1.7"])
axes[1].legend(loc='best', shadow=True,fontsize='medium')
axes[1].spines['top'].set_visible(False)
axes[1].spines['right'].set_visible(False)
axes[1].spines['left'].set_visible(False)
axes[1].set_title('Change in Standard Deviation (Sigma)', fontsize=14)
axes[1].set_xlabel('Z-Score', fontsize=11, weight='bold')
axes[1].axes.get_yaxis().set_visible(False)
axes[1].axvline(x=0, color='black', linestyle='dashed', linewidth=1)
fig.tight_layout()
plt.show()
###Python-Graph-3 in article titled Jump from discrete to a continuous distribution
##Common data
mu = 0
sigma = 1
x = np.arange(-3,3,0.001)
y = stats.norm.pdf(x, mu, sigma)
#Chart-0 data
z0 = x[x<-1]
#Chart-1 data
z1 = x[x<1]
#Chart-2 data
z2 = x[(-1 < x) & (x < 1)]
#Chart-3 data
z3 = x[x<-2]
#Chart-4 data
z4 = x[x<2]
#Chart-5 data
z5 = x[(-2 < x) & (x < 2)]
#Chart-6 data
z6 = x[x<-3]
#Chart-7 data
z7 = x[x<3]
#Chart-8 data
z8 = x[(-3 < x) & (x < 3)]
##Create the grid
fig, axes = plt.subplots(3, 3, figsize=(12,8))
fig.subplots_adjust(top=0.7)
#Chart-0 plotting
axes[0,0].plot(x, y)
axes[0,0].fill_between(z0, 0, stats.norm.pdf(z0, mu, sigma))
axes[0,0].set_title("Z-score < -1")
axes[0,0].get_yaxis().set_visible(False)
axes[0,0].spines['top'].set_visible(False)
# axes[0,0].spines['right'].set_visible(False)
axes[0,0].spines['left'].set_visible(False)
axes[0,0].annotate(round(stats.norm.cdf(-1),2), (-1.5, 0.1), fontsize=14, weight='bold')
axes[0,0].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-1 plotting
axes[0,1].plot(x, y)
axes[0,1].fill_between(z1, 0, stats.norm.pdf(z1, mu, sigma))
axes[0,1].set_title("Z-score < 1")
axes[0,1].get_yaxis().set_visible(False)
axes[0,1].spines['top'].set_visible(False)
# axes[0,1].spines['right'].set_visible(False)
axes[0,1].spines['left'].set_visible(False)
axes[0,1].annotate(round(stats.norm.cdf(1),2), (-1.5, 0.1), fontsize=14, weight='bold')
axes[0,1].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-2 plotting
axes[0,2].plot(x, y)
axes[0,2].fill_between(z2, 0, stats.norm.pdf(z2, mu, sigma), color="orange")
axes[0,2].set_title("-1 < Z-score < 1")
axes[0,2].get_yaxis().set_visible(False)
axes[0,2].spines['top'].set_visible(False)
# axes[0,2].spines['right'].set_visible(False)
axes[0,2].spines['left'].set_visible(False)
axes[0,2].annotate(round(stats.norm.cdf(1)-stats.norm.cdf(-1),2), (-0.5, 0.1), fontsize=14, weight='bold')
axes[0,2].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-3 plotting
axes[1,0].plot(x, y)
axes[1,0].fill_between(z3, 0, stats.norm.pdf(z3, mu, sigma))
axes[1,0].set_title("Z-score < -2")
axes[1,0].get_yaxis().set_visible(False)
axes[1,0].spines['top'].set_visible(False)
# axes[1,0].spines['right'].set_visible(False)
axes[1,0].spines['left'].set_visible(False)
axes[1,0].annotate(round(stats.norm.cdf(-2),2), (-1.5, 0.1), fontsize=14, weight='bold')
axes[1,0].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-4 plotting
axes[1,1].plot(x, y)
axes[1,1].fill_between(z4, 0, stats.norm.pdf(z4, mu, sigma))
axes[1,1].set_title("Z-score < 2")
axes[1,1].get_yaxis().set_visible(False)
axes[1,1].spines['top'].set_visible(False)
# axes[1,1].spines['right'].set_visible(False)
axes[1,1].spines['left'].set_visible(False)
axes[1,1].annotate(round(stats.norm.cdf(2),2), (-1.5, 0.1), fontsize=14, weight='bold')
axes[1,1].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-5 plotting
axes[1,2].plot(x, y)
axes[1,2].fill_between(z5, 0, stats.norm.pdf(z5, mu, sigma), color="orange")
axes[1,2].set_title("-2 < Z-score < 2")
axes[1,2].get_yaxis().set_visible(False)
axes[1,2].spines['top'].set_visible(False)
# axes[1,2].spines['right'].set_visible(False)
axes[1,2].spines['left'].set_visible(False)
axes[1,2].annotate(round(stats.norm.cdf(2)-stats.norm.cdf(-2),2), (-0.5, 0.1), fontsize=14, weight='bold')
axes[1,2].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-6 plotting
axes[2,0].plot(x, y)
axes[2,0].fill_between(z6, 0, stats.norm.pdf(z6, mu, sigma))
axes[2,0].set_title("Z-score < -3")
axes[2,0].get_yaxis().set_visible(False)
axes[2,0].spines['top'].set_visible(False)
# axes[2,0].spines['right'].set_visible(False)
axes[2,0].spines['left'].set_visible(False)
axes[2,0].annotate(round(stats.norm.cdf(-3),3), (-1.5, 0.1), fontsize=14, weight='bold')
axes[2,0].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-7 plotting
axes[2,1].plot(x, y)
axes[2,1].fill_between(z7, 0, stats.norm.pdf(z7, mu, sigma))
axes[2,1].set_title("Z-score < 3")
axes[2,1].get_yaxis().set_visible(False)
axes[2,1].spines['top'].set_visible(False)
# axes[2,1].spines['right'].set_visible(False)
axes[2,1].spines['left'].set_visible(False)
axes[2,1].annotate(round(stats.norm.cdf(3),3), (-1.5, 0.1), fontsize=14, weight='bold')
axes[2,1].set_xlabel('Z-Score', fontsize=11, weight='bold')
#Chart-8 plotting
axes[2,2].plot(x, y)
axes[2,2].fill_between(z8, 0, stats.norm.pdf(z8, mu, sigma), color="orange")
axes[2,2].set_title("-3 < Z-score < 3")
axes[2,2].get_yaxis().set_visible(False)
axes[2,2].spines['top'].set_visible(False)
# axes[2,2].spines['right'].set_visible(False)
axes[2,2].spines['left'].set_visible(False)
axes[2,2].annotate(round(stats.norm.cdf(3)-stats.norm.cdf(-3),3), (-0.5, 0.1), fontsize=14, weight='bold')
axes[2,2].set_xlabel('Z-Score', fontsize=11, weight='bold')
fig.tight_layout()
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment