def _plot_metrics()

in automl21/scs_neural/experimentation/launcher.py [0:0]


    def _plot_metrics(self, data, nrow, ncol, metrics, metric_names, tag, std=None):
        fig, axs = plt.subplots(nrow, ncol, figsize=(6*ncol, 4*nrow))
        for i in range(len(metrics)):
            if nrow > 1 and ncol > 1:
                ax = axs[int(i / 2)][i % 2]
            elif nrow > 1 or ncol > 1:
                ax = axs[i]
            else:
                ax = axs
            metric = metrics[i]
            metric_name = metric_names[i]
            if metric == 'loss':
                x = [i * self.cfg.test_freq for i in range(len(data['scs_neural'][metric]['train']))]
                ax.plot(x, data['scs_neural'][metric]['train'], label='training loss')
                ax.plot(x, data['scs_neural'][metric]['val'], label='validation loss')
                ax.plot(x, data['scs_neural'][metric]['test'], label='test loss')
                ax.set_yscale('log')
                ax.set_xlabel('Training Iteration')
            elif metric == 'all_u_diff_train':
                x = [i for i in range(len(data['scs_neural'][metric]))]
                delta_z = std['scs_neural'][metric]
                lower = [0 for i in range(len(data['scs_neural'][metric]))]
                upper = delta_z
                ax.errorbar(x, data['scs_neural'][metric], (lower, upper), ecolor='red', label='scs_neural')
                ax.set_yscale('log')
                ax.set_xlim((0, len(x)))
            elif std is not None:
                for m, name in enumerate(['scs_neural']):
                    x = [i for i in range(len(data[name][metric]))]
                    delta_z = std[name][metric]
                    lower = [0 for i in range(len(data[name][metric]))]
                    upper = delta_z
                    ax.errorbar(x, data[name][metric], (lower, upper), label=name)
                ax.set_xlabel('Fixed-Point Iteration')
                ax.set_yscale('log')
            else:
                ax.plot(data['scs_neural'][metric], label='scs_neural')
                ax.set_xlabel('Fixed-Point Iteration')
                ax.set_yscale('log')
                if metric in ['p_res', 'd_res']:
                    limits = self._find_y_limits([data['scs_neural'][metric]])
                    ax.set_ylim(limits)
            ax.set_ylabel(metric_name)
            ax.legend()

        fig.tight_layout()
        fname = tag + '.png'
        fig.savefig(fname)
        plt.close(fig)