analistica/ex-1/plots/misc.py

137 lines
4.2 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
from matplotlib import pyplot as plt
import numpy as np
import argparse
import sys
# -i → agrs.show → open plot in interactive mode
# -s → args.save → save plot
#
# -n → agrs.note → do the Landau plot with the notes
# -b → args.both → do the Landau-Moyal plot
# -m → args.area → do the Landau median plot
# -c → args.cauchy → do the Cauchy PDF plot
def moyal(x, μ, σ):
N = (1)/(np.sqrt(2 * np.pi) * σ)
return N * np.exp(- 0.5 * ((x - μ)/σ + np.exp(- (x - μ)/σ)))
def cauchy(x):
return 1/(np.pi*(1 + x**2))
def main(args):
# prepare figure
if args.show:
plt.figure()
elif args.save:
plt.rcParams['font.size'] = 8
if (args.both or args.area):
plt.figure(figsize=(3, 2))
elif args.note:
plt.figure(figsize=(5, 3))
elif args.cauchy:
plt.figure(figsize=(3, 2))
if args.note:
# useful coordinates
y_min = -0.0086 # y min axes
y_max = 0.1895 # y max axes
me = -0.22 # mode
f_me = 0.1806 # f(mode)
h_f_me = f_me/2 # falf f(mode)
x_m = -1.5867 # x₋
x_p = 2.4330 # x₊
# draw the lines
plt.plot([-10, me], [f_me, f_me], color='gray')
plt.plot([me, me], [f_me, y_min], color='gray')
plt.plot([-10, x_p], [h_f_me, h_f_me], color='gray')
plt.plot([x_m, x_m], [y_min, h_f_me], color='gray')
plt.plot([x_p, x_p], [y_min, h_f_me], color='gray')
# draw the notes
s = 0.012
S = 0.2
plt.annotate('$f(m_e)$', [-10 + S, f_me - s])
plt.annotate('$f(m_e)/2$', [-10 + S, h_f_me - s])
plt.annotate('$x_-$', [x_m + S, y_min + s/2])
plt.annotate('$x_+$', [x_p + S, y_min + s/2])
plt.annotate('$m_e$', [me + S, y_min + s/2])
# prepare plot
plt.title('Landau distribution', loc='right')
plt.xlim(-10, 10)
plt.ylim(y_min, y_max)
if args.both:
plt.ylim(-0.015, 0.265)
# draw Landau plot
x, y = np.loadtxt(sys.stdin, unpack=True)
plt.plot(x, y, color='#92182b', label='Landau')
# Color the area under the function
if args.area:
median = 1.3557804
x0 = np.argmin(abs(median - x))
plt.fill_between(x[:x0], y[:x0], color='#ff99a8')
plt.fill_between(x[x0:], y[x0:], color='#b28e94')
# do Moyal plot
if args.both:
μ = -0.22278298
σ = 1.1191486
x = np.arange(-10, 30, 0.01)
plt.plot(x, moyal(x, μ, σ), color='gray', label='Moyal')
plt.legend()
# do Cauchy plot
if args.cauchy:
x = np.arange(-10, 10, 0.01)
plt.plot(x, cauchy(x), color='gray', label='Cauchy')
plt.legend()
# save figure
plt.tight_layout()
if args.show:
plt.show()
elif args.save:
if args.note:
plt.savefig('notes/images/1-notes.pdf')
if args.both:
plt.savefig('slides/images/both-pdf.pdf', transparent=True)
if args.area:
plt.savefig('slides/images/median.pdf', transparent=True)
if args.cauchy:
plt.savefig('slides/images/cauchy-pdf.pdf', transparent=True)
if __name__ == '__main__':
# Parse data
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--show',
action='store_true', default=False,
help='show the plots')
parser.add_argument('-s', '--save',
action='store_true', default=False,
help='save the plots')
parser.add_argument('-b', '--both',
action='store_true', default=False,
help='do the both plot')
parser.add_argument('-n', '--note',
action='store_true', default=False,
help='do the note plot')
parser.add_argument('-a', '--area',
action='store_true', default=False,
help='do the area plot')
parser.add_argument('-c', '--cauchy',
action='store_true', default=False,
help='do the cauchy plot')
args = parser.parse_args()
main(args)