def plot()

in orbit/diagnostics/backtest.py [0:0]


    def plot(self, fig_width=20, show_index=False, strftime_fmt="%Y-%m-%d"):
        """
        Parameters
        ----------
        fig_width : float
        show_index : bool
        strftime_fmt : str

        Returns
        -------
        matplotlib axes object
        """
        _, ax = plt.subplots(figsize=(fig_width, self.n_splits))
        # visualize the train/test windows for each split
        tr_start = list()
        tr_len = list()
        # technically should be just self.forecast_len
        tt_len = list()
        yticks = list(range(self.n_splits))
        for idx, scheme in self._split_scheme.items():
            # fill in indices with the training/test groups
            tr_start.append(list(scheme[TimeSeriesSplitSchemeKeys.TRAIN_IDX.value])[0])
            tr_len.append(len(list(scheme[TimeSeriesSplitSchemeKeys.TRAIN_IDX.value])))
            tt_len.append(self.forecast_len)

        tr_start = np.array(tr_start)
        tr_len = np.array(tr_len)

        # ax.barh(yticks, tr_start, align='center', height=.5, color='black', alpha=0.5)
        ax.barh(
            yticks,
            tr_len,
            align="center",
            height=0.5,
            left=tr_start,
            color=OrbitPal.BLUE.value,
            label="train",
        )
        ax.barh(
            yticks,
            tt_len,
            align="center",
            height=0.5,
            left=tr_start + tr_len,
            color=OrbitPal.ORANGE.value,
            label="test",
        )

        if not show_index and self.date_col is not None:
            xticks_loc = np.array(ax.get_xticks(), dtype=int)
            new_xticks_loc = np.linspace(
                0, len(self.dt_array) - 1, num=len(xticks_loc)
            ).astype(int)
            dt_xticks = self.dt_array[new_xticks_loc]
            dt_xticks = dt_xticks.strftime(strftime_fmt)
            ax.set_xticks(new_xticks_loc)
            ax.set_xticklabels(dt_xticks)

        # some formatting parameters
        middle = 15
        large = 20

        ax.set_yticks(yticks)
        ax.set_ylabel("Split #", fontsize=large)
        ax.invert_yaxis()
        # ax.grid(which="both", color='grey', alpha=0.5)
        ax.tick_params(axis="x", which="major", labelsize=middle)
        ax.set_title("Train/Test Split Scheme", fontsize=large)
        return ax