Matplotlib fill function can fill a polygon given the coordinates of its vertices. See the first example in the following link.
https://matplotlib.org/gallery/lines_bars_and_markers/fill.html
This method can be extended to draw filled curves or shade the area under a curve. For example, if we want to shade the area under a normal distribution up to the z-score -1.4 like this
then we will first generate a list of (x,y) coordinate pairs along the curve of the distribution from x=-4 to x=-1.4 using y = Exp(-x^2/2)/√ (2π).
y-values are generated using the scipy function norm() which returns the value of the Gaussian Exp(-x^2/2)/√ (2π). This will generate (x,y) pairs along the curve of the Gaussian. However, we will need to add the (-1.4,0) coordinate so that the curve closes.
from scipy.stats import norm import matplotlib.pyplot as plt import numpy as np interval = 0.1 x = np.arange(-4, 4, interval) y = norm.pdf(x) # z-score z = -1.4 # we want to shade from -inf to z or rather the interval [-x_min, z] # generate x-coordinates: [-x_min,z] xarea = np.arange(-4, z, interval) # generate y-coordinates yarea = norm.pdf(xarea) # need to add the point (x,y): (z, 0) so that # polygon fills all the way to the x-axis # append x=z-score xarea = np.append(xarea, xarea[-1]) # append y=0 yarea = np.append(yarea, 0 ) plt.plot(x, y) plt.fill(xarea, yarea) plt.text(-1.4 , 0 , '-1.4' , {'color':'r'}) plt.show()
Maximize plots from within code
# show plot in a maximized window
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()