Project-4/python_scripts/pd_estimate.py
2023-12-03 16:42:50 +01:00

64 lines
1.7 KiB
Python

from os import makedirs
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from scipy.stats import norm
sns.set_theme()
params = {
"font.family": "Serif",
"font.serif": "Roman",
"text.usetex": True,
"axes.titlesize": "large",
"axes.labelsize": "large",
"xtick.labelsize": "large",
"ytick.labelsize": "large",
"legend.fontsize": "medium",
}
plt.rcParams.update(params)
def plot(infile, outfile):
if not (outdir := Path(outfile).parent).exists():
makedirs(outdir)
figure1, ax1 = plt.subplots()
eps = []
with open(infile) as f:
lines = f.readlines()
for line in lines:
vals = line.strip().split(",")
eps.append(float(vals[0]))
ax1.hist(
eps,
np.arange(min(eps), max(eps) + 0.02, 0.02),
color="steelblue",
density=True,
ec="white",
lw=0.2,
)
ax1.set_xlabel(r"$\epsilon$")
ax1.set_ylabel("Density")
mu, sigma = np.mean(eps), np.std(eps)
x = np.arange(min(eps), max(eps) + 0.02, 0.02)
stats = (
f"$\\langle \\epsilon \\rangle$ = {np.mean(eps):.4f}\n"
f"Var$(\\epsilon)$ = {np.var(eps):.4f}"
)
bbox = dict(boxstyle="round", pad=0.3, fc="white", ec="white", alpha=0.5)
ax1.text(
0.95, 0.9, stats, bbox=bbox, transform=ax1.transAxes, ha="right", va="center"
)
ax1.plot(x, norm.pdf(x, mu, sigma), color="mediumseagreen")
figure1.savefig(outfile, bbox_inches="tight")
if __name__ == "__main__":
plot("./data/hp/pd_estimate/estimate_1_0.txt", "./latex/images/pd_estimate_1_0.pdf")
plot("./data/hp/pd_estimate/estimate_2_4.txt", "./latex/images/pd_estimate_2_4.pdf")