code: def plot_projections(x, relative_to=None, autolim=True, axes=None,
                       subplots_kwargs=dict(), labels=None, plot_function=None,
                       **kwargs):
      x = np.array(x, copy=True)
      ndim = x.shape[0]
      if axes is None:
          axes = _get_axes(dim=ndim, subplots_kwargs=subplots_kwargs)
      if relative_to is not None:
          x -= relative_to
      plot_fn_name = plot_function.__name__
      if autolim:
          lims = []
          for i in range(ndim):
              max_,min_ = np.max(x[i]), np.min(x[i])
              delta = max_ - min_
              if delta == 0.:
                  delta = 1.
              lims.append([min_ - delta*0.02, max_ + delta*0.02])
      k = 0
      for i in range(ndim):
          for j in range(ndim):
              if i >= j:
                  continue
              plot_func = getattr(axes[k], plot_fn_name)
              plot_func(x[i], x[j], **kwargs)
              if labels is not None:
                  axes[k].set_xlabel(labels[i])
                  axes[k].set_ylabel(labels[j])
              if autolim:
                  axes[k].set_xlim(lims[i])
                  axes[k].set_ylim(lims[j])
              k += 1
      axes[0].figure.tight_layout()
      return axes[0].figure