def setup_figure(self):
        """Sets up the initial figure on to which every plot is added.

        """

        # declare figure and axes environments
        fig, ax = plt.subplots(nrows=int(self.num_rows),
                               ncols=int(self.num_cols),
                               sharex=self.sharex,
                               sharey=self.sharey)

        fig.set_size_inches(self.figure_width, self.figure_height)

        # create list of ax. Catch error if it is a single plot.
        try:
            ax = ax.ravel()
        except AttributeError:
            ax = [ax]

        # create list of plot types
        self.plot_types = [self.plot_info[str(i)]['plot_type'] for i in range(len(ax))]

        if len(self.plot_types) == 1:
            if self.plot_types[0] not in self.colorbars:
                self.colorbars[self.plot_types[0]] = {'cbar_pos': 5}
            else:
                if 'cbar_pos' not in self.colorbars[self.plot_types[0]]:
                    self.colorbars[self.plot_types[0]]['cbar_pos'] = 5

        # prepare colorbar classes
        self.colorbar_classes = {}
        for plot_type in self.plot_types:
            if plot_type in self.colorbar_classes:
                continue
            if plot_type == 'Horizon':
                self.colorbar_classes[plot_type] = None

            elif plot_type in self.colorbars:
                self.colorbar_classes[plot_type] = FigColorbar(fig, plot_type,
                                                               **self.colorbars[plot_type])

            else:
                self.colorbar_classes[plot_type] = FigColorbar(fig, plot_type)

        # set subplots_adjust settings
        if 'Ratio' in self.plot_types or 'Waterfall':
            self.subplots_adjust_kwargs['right'] = 0.79

        # adjust figure sizes
        fig.subplots_adjust(**self.subplots_adjust_kwargs)

        if 'fig_y_label' in self.__dict__.keys():
            fig.text(self.fig_y_label_x,
                     self.fig_y_label_y,
                     r'{}'.format(self.fig_y_label),
                     **self.fig_y_label_kwargs)

        if 'fig_x_label' in self.__dict__.keys():
            fig.text(self.fig_x_label_x,
                     self.fig_x_label_y,
                     r'{}'.format(self.fig_x_label),
                     **self.fig_x_label_kwargs)

        if 'fig_title' in self.__dict__.keys():
            fig.text(self.fig_title_kwargs['x'],
                     self.fig_title_kwargs['y'],
                     r'{}'.format(self.fig_title),
                     **self.fig_title_kwargs)

        self.fig, self.ax = fig, ax
        return
Sets up the initial figure on to which every plot is added.