ba-thesis/sw/plot_results.py

57 lines
1.5 KiB
Python

import typing
import matplotlib.pyplot as plt
import seaborn as sns
import os
from utility import visualization, simulation
# TODO: This should be the responsibility of the DeSerializer
def get_sim_slugs(results_dir: str) -> typing.List[str]:
"""Get a list of slugified simulation names."""
result_files = [f for f in os.listdir(results_dir) if
os.path.isfile(os.path.join(results_dir, f))]
metadata_files = [f for f in result_files if f.endswith("_metadata.json")]
sim_slugs = [f.removesuffix("_metadata.json") for f in metadata_files]
return sim_slugs
def plot_results() -> None:
"""Plot the BER curves for all present simulation results."""
saves_dir = "sim_saves"
results_dir = "sim_results"
slugs = get_sim_slugs(results_dir)
deserializer = simulation.SimulationDeSerializer(save_dir=saves_dir,
results_dir=results_dir)
# Read data
data = []
for slug in slugs:
df, metadata = deserializer.read_results(slug)
df = df.loc[:, ~df.columns.str.contains('^Unnamed')]
graph_title = metadata["name"]
line_labels = metadata["labels"]
graph_tuple = (graph_title, df, line_labels)
data.append(graph_tuple)
# Plot results
sns.set_theme()
fig = visualization.plot_BERs(
title="Bit-Error-Rates of proximal decoder for different codes",
data=data, num_cols=4)
plt.show()
if __name__ == "__main__":
plot_results()