from pathlib import Path import pickle import matplotlib import matplotlib.pyplot as plt from paper.comparison.settings import models, pretty_method, method_colors outdir = Path("out/comparison") meshdir = outdir / "mesh" with open(outdir / "results.pickle", "rb") as file: results = pickle.load(file) methods = "adam", "adam_remesh", "adam_remesh_complex", "ours" names = results.keys() linestyles = { "ours": "-", "adam": "-", "adam_remesh": "-", "adam_remesh_complex": "--", } matplotlib.rcParams["font.size"] = 6 matplotlib.rcParams["legend.fontsize"] = 5 matplotlib.rcParams["xtick.labelsize"] = 3 matplotlib.rcParams["ytick.labelsize"] = 3 matplotlib.rcParams["grid.linewidth"] = 0.2 matplotlib.rcParams["lines.linewidth"] = 0.75 matplotlib.rcParams["xtick.major.pad"] = 1.5 matplotlib.rcParams["ytick.major.pad"] = 1.5 matplotlib.rcParams["text.usetex"] = True matplotlib.rcParams[ "text.latex.preamble" ] = r"""\usepackage{libertine} \usepackage{amsmath}""" matplotlib.rcParams["pdf.fonttype"] = 42 matplotlib.rcParams["ps.fonttype"] = 42 w_img = 0.12 w_plot = 0.17 w_plot_inner = 0.135 h_plot_inner = 0.115 fig = plt.figure(figsize=(4, 4)) pretty_names = [name.capitalize() for name in names] for model_ind, model in enumerate(names): ax_img = fig.add_axes((0, -model_ind * w_img, w_img, w_img)) ax_img.set_xticks([]) ax_img.set_yticks([]) ax_img.set_ylabel(pretty_names[model_ind]) ax_img.imshow( plt.imread(outdir / f"target_mesh/render/{model}.png"), aspect="equal" ) x0 = w_img + w_plot - w_plot_inner ax_dist = fig.add_axes((x0, -model_ind * w_img, w_plot_inner, h_plot_inner)) ax_dist.set_ylim(3e-4, 3e-1) if model_ind == 0: ax_dist.set_title("Distance") ax_edgelen = fig.add_axes( (x0 + w_plot, -model_ind * w_img, w_plot_inner, h_plot_inner) ) ax_edgelen.set_ylim(8e-3, 3e-1) if model_ind == 0: ax_edgelen.set_title("Edge Length") ax_flips = fig.add_axes( (x0 + 2 * w_plot, -model_ind * w_img, w_plot_inner, h_plot_inner) ) ax_flips.set_ylim(1e-4, 6e-1) if model_ind == 0: ax_flips.set_title("Flip Ratio") for ax in [ax_dist, ax_edgelen, ax_flips]: ax.set_xlim(0, 3) ax.set_yscale("log") ax.set_facecolor("#ddd") ax.grid(color="w") if model_ind == 0: ax.xaxis.set_ticks_position("top") if model_ind > -1 and model_ind < len(names) - 1: ax.xaxis.set_ticklabels([]) if model_ind == len(names) - 1: ax.set_xlabel("time [s]") for method_ind, method in enumerate(methods): result = results[model][method] ax_dist.plot( result["times"], result["rms_distances"], color=method_colors[method], linestyle=linestyles[method], label=pretty_method[method], ) ax_edgelen.plot( result["times"], result["edge_lengths"], color=method_colors[method], linestyle=linestyles[method], label=pretty_method[method], ) ax_flips.plot( result["times"], result["flip_ratios"], color=method_colors[method], linestyle=linestyles[method], label=pretty_method[method], ) if model_ind == len(names) - 1: ax_flips.legend(bbox_to_anchor=(0, -0.7)) for ax in fig.axes: ax.minorticks_off() ax.tick_params(axis="both", which="both", length=0) for spine in ax.spines.values(): spine.set_visible(False) fig.savefig( outdir / "comparison_curves.pdf", format="pdf", dpi=600, bbox_inches="tight", pad_inches=0.03, )