<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def initialize_plot(self, data=None, ax=None, make_plot=True, clear=False, draw=False, remove=False, priority=None):
 """ Initialize the plot for a data array Parameters data: InteractiveArray or ArrayList, optional Data object that shall be visualized. - If not None and `plot` is True, the given data is visualized. - If None and the :attr:`data` attribute is not None, the data in the :attr:`data` attribute is visualized - If both are None, nothing is done. %(Plotter.parameters.ax|make_plot|clear)s %(InteractiveBase.start_update.parameters.draw)s remove: bool If True, old effects by the formatoptions in this plotter are undone first priority: int If given, initialize only the formatoption with the given priority. This value must be out of :data:`START`, :data:`BEFOREPLOTTING` or :data:`END` """

        if data is None and self.data is not None:
            data = self.data
        else:
            self.data = data
        self.ax = ax
        if data is None:  # nothing to do if no data is given
            return
        self.no_auto_update = not (
            not self.no_auto_update or not data.psy.no_auto_update)
        data.psy.plotter = self
        if not make_plot:  # stop here if we shall not plot
            return
        self.logger.debug("Initializing plot...")
        if remove:
            self.logger.debug("    Removing old formatoptions...")
            for fmto in self._fmtos:
                try:
                    fmto.remove()
                except Exception:
                    self.logger.debug(
                        "Could not remove %s while initializing", fmto.key,
                        exc_info=True)
        if clear:
            self.logger.debug("    Clearing axes...")
            self.ax.clear()
            self.cleared = True
        # get the formatoptions. We sort them here by key to make sure that the
        # order always stays the same (easier for debugging)
        fmto_groups = self._grouped_fmtos(self._sorted_by_priority(
            sorted(self._fmtos, key=lambda fmto: fmto.key)))
        self.plot_data = self.data
        self._updating = True
        for fmto_priority, grouper in fmto_groups:
            if priority is None or fmto_priority == priority:
                self._plot_by_priority(fmto_priority, grouper,
                                       initializing=True)
        self._release_all(True)  # finish the update
        self.cleared = False
        self.replot = False
        self._initialized = True
        self._updating = False

        if draw is None:
            draw = rcParams['auto_draw']
        if draw:
            self.draw()
            if rcParams['auto_show']:
                self.show()