From a7433cbf4e2576b91380149844d0f061984e6d25 Mon Sep 17 00:00:00 2001 From: Youngjoon Lee <5462944+youngjoon-lee@users.noreply.github.com> Date: Tue, 28 May 2024 13:48:56 +0900 Subject: [PATCH] add boxplot --- mixnet/v2/sim/analysis.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/mixnet/v2/sim/analysis.py b/mixnet/v2/sim/analysis.py index 8e87139..5f40266 100644 --- a/mixnet/v2/sim/analysis.py +++ b/mixnet/v2/sim/analysis.py @@ -96,10 +96,11 @@ class Analysis: if not df.empty: dataframes.append(df) df = pd.concat(dataframes, ignore_index=True) - df_pivot = df.pivot(index="time", columns="node_id", values="msg_cnt") + + msg_cnt_df = df.pivot(index="time", columns="node_id", values="msg_cnt") plt.figure(figsize=(12, 6)) - for column in df_pivot.columns: - plt.plot(df_pivot.index, df_pivot[column], marker=None, label=column) + for column in msg_cnt_df.columns: + plt.plot(msg_cnt_df.index, msg_cnt_df[column], marker=None, label=column) plt.title("Messages in each node over time") plt.xlabel("Time") plt.ylabel("Msg Count") @@ -108,10 +109,10 @@ class Analysis: plt.tight_layout() plt.show() - df_pivot = df.pivot(index="time", columns="node_id", values="sender_cnt") + sender_cnt_df = df.pivot(index="time", columns="node_id", values="sender_cnt") plt.figure(figsize=(12, 6)) - for column in df_pivot.columns: - plt.plot(df_pivot.index, df_pivot[column], marker=None, label=column) + for column in sender_cnt_df.columns: + plt.plot(sender_cnt_df.index, sender_cnt_df[column], marker=None, label=column) plt.title("Senders of messages in each node over time") plt.xlabel("Time") plt.ylabel("Sender Count") @@ -120,6 +121,18 @@ class Analysis: plt.tight_layout() plt.show() + plt.figure(figsize=(12, 6)) + df.boxplot(column="sender_cnt", by="time", medianprops={"color": "red", "linewidth": 2.5}) + plt.title("Distribution of senders of messages in each node over time") + plt.suptitle("") + plt.xticks([]) + plt.xlabel("Time") + plt.ylabel("Sender Count") + plt.ylim(bottom=0) + plt.grid(axis="x") + plt.tight_layout() + plt.show() + def node_states(self): rows = [] for time, node_states in self.sim.p2p.adversary.node_states.items():