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