|
|
|
|
|
import pandas as pd |
|
|
import matplotlib.pyplot as plt |
|
|
import seaborn as sns |
|
|
import pandas as pd |
|
|
import numpy as np |
|
|
import numpy as np |
|
|
import torch |
|
|
import os |
|
|
|
|
|
|
|
|
def plot_data_with_distribution_seaborn(log1, log2=None, |
|
|
save_path=None, |
|
|
label1=None, |
|
|
label2=None, |
|
|
title=None): |
|
|
""" |
|
|
Plots one or two datasets with the average values and distributions over iterations using Seaborn. |
|
|
|
|
|
Parameters: |
|
|
log1 (list of lists): The first list of scores (each element is a list of scores for an iteration). |
|
|
log2 (list of lists, optional): The second list of scores (each element is a list of scores for an iteration). Defaults to None. |
|
|
save_path (str): Path to save the plot. Defaults to None. |
|
|
label1 (str): Label for the first dataset. Defaults to "Fraction of Valid Peptide SMILES". |
|
|
label2 (str, optional): Label for the second dataset. Defaults to None. |
|
|
title (str): Title of the plot. Defaults to "Fraction of Valid Peptides Over Iterations". |
|
|
""" |
|
|
|
|
|
data1 = pd.DataFrame({ |
|
|
"Iteration": np.repeat(range(1, len(log1) + 1), [len(scores) for scores in log1]), |
|
|
label1: [score for scores in log1 for score in scores], |
|
|
"Dataset": label1, |
|
|
"Style": "Log1" |
|
|
}) |
|
|
|
|
|
|
|
|
if log2 is not None: |
|
|
data2 = pd.DataFrame({ |
|
|
"Iteration": np.repeat(range(1, len(log2) + 1), [len(scores) for scores in log2]), |
|
|
label2: [score for scores in log2 for score in scores], |
|
|
"Dataset": label2, |
|
|
"Style": "Log2" |
|
|
}) |
|
|
data = pd.concat([data1, data2], ignore_index=True) |
|
|
else: |
|
|
data = data1 |
|
|
|
|
|
palette = { |
|
|
label1: "#8181ED", |
|
|
label2: "#D577FF" |
|
|
} |
|
|
|
|
|
|
|
|
sns.set_theme() |
|
|
sns.set_context("paper") |
|
|
|
|
|
|
|
|
sns.relplot( |
|
|
data=data, |
|
|
kind="line", |
|
|
x="Iteration", |
|
|
y=label1, |
|
|
hue="Dataset", |
|
|
style="Style", |
|
|
markers=True, |
|
|
dashes=True, |
|
|
ci="sd", |
|
|
height=5, |
|
|
aspect=1.5, |
|
|
palette=palette |
|
|
) |
|
|
|
|
|
|
|
|
plt.title(title) |
|
|
plt.xlabel("Iteration") |
|
|
plt.ylabel(label1) |
|
|
|
|
|
if save_path: |
|
|
plt.savefig(save_path, dpi=300, bbox_inches='tight') |
|
|
print(f"Plot saved to {save_path}") |
|
|
plt.show() |
|
|
|
|
|
def plot_data(log1, log2=None, |
|
|
save_path=None, |
|
|
label1="Log 1", |
|
|
label2=None, |
|
|
title="Fraction of Valid Peptides Over Iterations", |
|
|
palette=None): |
|
|
""" |
|
|
Plots one or two datasets with their mean values over iterations. |
|
|
|
|
|
Parameters: |
|
|
log1 (list): The first list of mean values for each iteration. |
|
|
log2 (list, optional): The second list of mean values for each iteration. Defaults to None. |
|
|
save_path (str): Path to save the plot. Defaults to None. |
|
|
label1 (str): Label for the first dataset. Defaults to "Log 1". |
|
|
label2 (str, optional): Label for the second dataset. Defaults to None. |
|
|
title (str): Title of the plot. Defaults to "Mean Values Over Iterations". |
|
|
palette (dict, optional): A dictionary defining custom colors for datasets. Defaults to None. |
|
|
""" |
|
|
|
|
|
data1 = pd.DataFrame({ |
|
|
"Iteration": range(1, len(log1) + 1), |
|
|
"Fraction of Valid Peptides": log1, |
|
|
"Dataset": label1 |
|
|
}) |
|
|
|
|
|
|
|
|
if log2 is not None: |
|
|
data2 = pd.DataFrame({ |
|
|
"Iteration": range(1, len(log2) + 1), |
|
|
"Fraction of Valid Peptides": log2, |
|
|
"Dataset": label2 |
|
|
}) |
|
|
data = pd.concat([data1, data2], ignore_index=True) |
|
|
else: |
|
|
data = data1 |
|
|
|
|
|
palette = { |
|
|
label1: "#8181ED", |
|
|
label2: "#D577FF" |
|
|
} |
|
|
|
|
|
|
|
|
sns.set_theme() |
|
|
sns.set_context("paper") |
|
|
|
|
|
|
|
|
sns.lineplot( |
|
|
data=data, |
|
|
x="Iteration", |
|
|
y="Fraction of Valid Peptides", |
|
|
hue="Dataset", |
|
|
style="Dataset", |
|
|
markers=True, |
|
|
dashes=False, |
|
|
palette=palette |
|
|
) |
|
|
|
|
|
|
|
|
plt.title(title) |
|
|
plt.xlabel("Iteration") |
|
|
plt.ylabel("Fraction of Valid Peptides") |
|
|
|
|
|
if save_path: |
|
|
plt.savefig(save_path, dpi=300, bbox_inches='tight') |
|
|
print(f"Plot saved to {save_path}") |
|
|
plt.show() |