From 11550643067e4f10783ed7a8f78b39ab5ba7d04e Mon Sep 17 00:00:00 2001 From: Joshua Coles Date: Fri, 17 Mar 2023 21:45:33 +0000 Subject: [PATCH] Add 3D sp graph --- figures/sp-fd-3d.png | Bin 0 -> 27203 bytes figures/sp-fd-3d.svg | 1146 +++++++++++++++++++++++++++++++++++++++++ figures/sp-fd.svg | 34 +- notebooks/lib.py | 36 +- notebooks/sp-fd-3d.py | 18 + notebooks/sp-fd.py | 22 +- 6 files changed, 1220 insertions(+), 36 deletions(-) create mode 100644 figures/sp-fd-3d.png create mode 100644 figures/sp-fd-3d.svg create mode 100644 notebooks/sp-fd-3d.py diff --git a/figures/sp-fd-3d.png b/figures/sp-fd-3d.png new file mode 100644 index 0000000000000000000000000000000000000000..26df98f0a815c997d88c7c29753e24d052bb71b0 GIT binary patch literal 27203 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 WyH#FY`vNa?qF9-)rJpx-i~b+Bzvg@Z literal 0 HcmV?d00001 diff --git a/figures/sp-fd-3d.svg b/figures/sp-fd-3d.svg new file mode 100644 index 0000000..22fca2e --- /dev/null +++ b/figures/sp-fd-3d.svg @@ -0,0 +1,1146 @@ + + + + + + + + 2023-03-17T21:39:52.757408 + image/svg+xml + + + Matplotlib v3.7.0, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figures/sp-fd.svg b/figures/sp-fd.svg index bee771d..ca1f38a 100644 --- a/figures/sp-fd.svg +++ b/figures/sp-fd.svg @@ -6,7 +6,7 @@ - 2023-03-17T21:12:53.560959 + 2023-03-17T21:40:06.539395 image/svg+xml @@ -241,18 +241,18 @@ L 80.391405 85.275263 L 77.112066 68.875397 L 73.832727 53.568 z -" clip-path="url(#pfe185082f7)" style="fill: #1f77b4; fill-opacity: 0.2"/> +" clip-path="url(#p910af6b5dd)" style="fill: #1f77b4; fill-opacity: 0.2"/> - - + @@ -297,7 +297,7 @@ z - + @@ -338,7 +338,7 @@ z - + @@ -374,7 +374,7 @@ z - + @@ -421,7 +421,7 @@ z - + @@ -477,7 +477,7 @@ z - + @@ -663,12 +663,12 @@ z - - + @@ -695,7 +695,7 @@ z - + @@ -710,7 +710,7 @@ z - + @@ -757,7 +757,7 @@ z - + @@ -772,7 +772,7 @@ z - + @@ -948,7 +948,7 @@ L 388.649256 264.966605 L 391.928595 266.435894 L 395.207934 269.009223 L 398.487273 267.63711 -" clip-path="url(#pfe185082f7)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> +" clip-path="url(#p910af6b5dd)" style="fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square"/> + diff --git a/notebooks/lib.py b/notebooks/lib.py index f5b10ad..0273ca1 100644 --- a/notebooks/lib.py +++ b/notebooks/lib.py @@ -68,6 +68,16 @@ def read_load(load_dir: str, reader=read_xy_alt): return pd.concat([reader(path) for path in paths]) +def augment_read_with_sp(inner_reader): + def hoc(path: str): + probability = float(Path(path).parent.name) + df = inner_reader(path) + df['probability'] = probability + return df + + return hoc + + def read_sp_xy(specific_probability_dir: str): probability = float(Path(specific_probability_dir).name) df = read_load(specific_probability_dir) @@ -76,11 +86,16 @@ def read_sp_xy(specific_probability_dir: str): return df -def read_sp(sp_dir: str): +def read_sp(sp_dir: str, inner_reader=read_xy_alt): if not Path(sp_dir).exists(): raise Exception("Root does not exist") - return pd.concat([read_sp_xy(specific_probability_dir) for specific_probability_dir in glob(f'{sp_dir}/*')]) + reader = augment_read_with_sp(inner_reader) + + return pd.concat([ + read_load(specific_probability_dir, reader) + for specific_probability_dir in glob(f'{sp_dir}/*') + ]) def convergent_tail_index(series, tol): @@ -126,3 +141,20 @@ def mean_across(df): .replace([np.inf, -np.inf], np.nan) return data + + +def aggregate_sp_fd(df): + by_run = df.groupby(['probability', 'N']) + + by_probability = by_run.agg( + overall_fd=('fd', lambda fd: np.mean(fd[-100:])), + overall_fd_std=('fd', 'std') + ).reset_index().groupby('probability') + + data = by_probability.agg( + fd=('overall_fd', 'mean'), + # TODO Check stats + fd_std=('overall_fd_std', lambda std: np.sqrt(np.mean(np.square(std)))) + ) + + return data diff --git a/notebooks/sp-fd-3d.py b/notebooks/sp-fd-3d.py new file mode 100644 index 0000000..f4fa84d --- /dev/null +++ b/notebooks/sp-fd-3d.py @@ -0,0 +1,18 @@ +from matplotlib import pyplot as plt + +from notebooks.lib import read_sp, read_xyz_alt, aggregate_sp_fd + +data_3d_sp = read_sp("../data/rust-3d-offaxis-sp", read_xyz_alt) +sp_fd_data = aggregate_sp_fd(data_3d_sp) + +# %% +plt.fill_between(sp_fd_data.index, sp_fd_data.fd - sp_fd_data.fd_std, sp_fd_data.fd + sp_fd_data.fd_std, alpha=0.2, label=f"Standard error band") +plt.plot(sp_fd_data.index, sp_fd_data.fd, color='tab:blue', label='fd mean, seeds = 100') + +plt.xlabel("$p_{stick}$") +plt.ylabel("$fd$") +plt.legend() + +plt.savefig('../figures/sp-fd-3d.svg') +plt.savefig('../figures/sp-fd-3d.png') +plt.show() diff --git a/notebooks/sp-fd.py b/notebooks/sp-fd.py index fa04c10..4750318 100644 --- a/notebooks/sp-fd.py +++ b/notebooks/sp-fd.py @@ -1,25 +1,13 @@ -import numpy as np from matplotlib import pyplot as plt -from notebooks.lib import read_sp +from notebooks.lib import read_sp, aggregate_sp_fd -c_sp = read_sp("../data/stick-probability") -by_run = c_sp.groupby(['probability', 'N']) - -by_probability = by_run.agg( - overall_fd=('fd', lambda fd: np.mean(fd[-100:])), - overall_fd_std=('fd', 'std') -).reset_index().groupby('probability') - -ggg = by_probability.agg( - fd=('overall_fd', 'mean'), - # TODO Check stats - fd_std=('overall_fd_std', lambda std: np.sqrt(np.mean(np.square(std)))) -) +data_2d_sp = read_sp("../data/stick-probability") +sp_fd_data = aggregate_sp_fd(data_2d_sp) # %% -plt.fill_between(ggg.index, ggg.fd - ggg.fd_std, ggg.fd + ggg.fd_std, alpha=0.2, label=f"Standard error band") -plt.plot(ggg.index, ggg.fd, color='tab:blue', label='fd mean, seeds = 100') +plt.fill_between(sp_fd_data.index, sp_fd_data.fd - sp_fd_data.fd_std, sp_fd_data.fd + sp_fd_data.fd_std, alpha=0.2, label=f"Standard error band") +plt.plot(sp_fd_data.index, sp_fd_data.fd, color='tab:blue', label='fd mean, seeds = 100') plt.xlabel("$p_{stick}$") plt.ylabel("$fd$")