import seaborn as sns from matplotlib import pyplot as plt import numpy as np import os import pandas as pd import torch import seaborn as sns import torch.nn.functional as F def plot_distribution(args, id_scores, ood_scores, out_dataset, score=None): sns.set(style="white", palette="muted") palette = ['#A8BAE3', '#55AB83'] data = { "ID": [-1 * id_score for id_score in id_scores], "OOD": [-1 * ood_score for ood_score in ood_scores] } sns.displot(data, label="id", kind="kde", palette=palette, fill=True, alpha=0.8) if score is not None: plt.savefig(os.path.join(args.output_dir,f"{out_dataset}_{args.T}_{score}.png"), bbox_inches='tight') else: plt.savefig(os.path.join(args.output_dir,f"{out_dataset}_{args.T}.png"), bbox_inches='tight') def show_values_on_bars(axs): def _show_on_single_plot(ax): for p in ax.patches: _x = p.get_x() + p.get_width() / 2 _y = p.get_y() + p.get_height() value = '{:.2f}'.format(p.get_height()) ax.text(_x, _y, value, ha="center", fontsize=9) if isinstance(axs, np.ndarray): for idx, ax in np.ndenumerate(axs): _show_on_single_plot(ax) else: _show_on_single_plot(axs)