import pandas as pd import numpy as np import plotly.express as px import plotly.figure_factory as ff def results_to_df(results: dict, metric_name: str): metric_scores = [] for topic, results_dict in results.items(): for metric_name_cur, metric_value in results_dict.items(): if metric_name == metric_name_cur: metric_scores.append(metric_value) return pd.DataFrame({metric_name: metric_scores}) def create_boxplot_1df(results: dict, metric_name: str): df = results_to_df(results, metric_name) fig = px.box(df, y=metric_name) return fig def create_boxplot_2df(results1, results2, metric_name): df1 = results_to_df(results1, metric_name) df2 = results_to_df(results2, metric_name) df2["Run"] = "Run 2" df1["Run"] = "Run 1" df = pd.concat([df1, df2]) # Create distplot with custom bin_size fig = px.histogram(df, x=metric_name, color="Run", marginal="box", hover_data=df.columns) return fig def create_boxplot_diff(results1, results2, metric_name): df1 = results_to_df(results1, metric_name) df2 = results_to_df(results2, metric_name) diff = df1[metric_name] - df2[metric_name] x_axis = f"Difference in {metric_name} from 1 to 2" fig = px.histogram(pd.DataFrame({x_axis: diff}), x=x_axis, marginal="box") return fig