misc: make slides-plot.py usable by CLI

This commit is contained in:
Giù Marcer 2020-06-07 19:08:23 +02:00 committed by rnhmjoj
parent 9c181ee241
commit 7ebd25b709

View File

@ -2,60 +2,108 @@
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
def moyal(x, μ, σ):
N = (1)/(np.sqrt(2 * np.pi) * σ)
return N * np.exp(- 0.5 * ((x - μ)/σ + np.exp( - (x - μ)/σ)))
def main(args):
# prepare figure
if args.show:
plt.figure()
# plt.figure(figsize=(3.5, 2.5))
# plt.rcParams['font.size'] = 8
elif args.save:
plt.rcParams['font.size'] = 8
if args.both:
plt.figure(figsize=(3, 2))
elif args.note:
plt.figure(figsize=(5, 3))
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₊
# prepare plot
x, y = np.loadtxt(sys.stdin, unpack=True)
# plt.title('Landau distribution', loc='right')
# plt.xlim(-10, 10)
# plt.ylim(y_min, y_max)
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 function
plt.plot(x, y, color='#92182b')
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])
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')
# do Moyal plot
if args.both:
μ = -0.22278298
σ = 1.1191486
x = np.arange(-10, 30, 0.01)
plt.plot(x, moyal(x, μ, σ), color='gray')
plt.plot(x, moyal(x, μ, σ), color='gray', label='Moyal')
plt.legend()
# save figure
plt.tight_layout()
if args.show:
plt.show()
# plt.savefig('notes/images/1-notes.pdf')
# plt.savefig('slides/images/both-pdf.pdf', transparent=True)
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 __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')
args = parser.parse_args()
main(args)