# Example: plot_utils

> Note

> You can launch an interactive, editable version of this example without installing any local files using the Binder service (although note that at some times this may be slow or fail to open):

Module with useful functions for making publication-ready plots.

    def adjust_spines(ax, spines, position=5):
        """
        Set custom visibility and position of axes

        ax       : Axes
         Axes handle
        spines   : List
         String list of 'left', 'bottom', 'right', 'top' spines to show
        position : Integer
         Number of points for position of axis
        """
        for loc, spine in ax.spines.items():
            if loc in spines:
                spine.set_position(('outward', position))
            else:
                spine.set_color('none')  # don't draw spine

        # turn off ticks where there is no spine
        if 'left' in spines:
            ax.yaxis.set_ticks_position('left')
        elif 'right' in spines:
            ax.yaxis.set_ticks_position('right')
        else:
            # no yaxis ticks
            ax.yaxis.set_ticks([])
            ax.tick_params(axis='y', which='both', left='off', right='off')

        if 'bottom' in spines:
            ax.xaxis.set_ticks_position('bottom')
        elif 'top' in spines:
            ax.xaxis.set_ticks_position('top')
        else:
            # no xaxis ticks
            ax.xaxis.set_ticks([])
            ax.tick_params(axis='x', which='both', bottom='off', top='off')

    def adjust_ylabels(ax,x_offset=0):
        '''
        Scan all ax list and identify the outmost y-axis position.
        Setting all the labels to that position + x_offset.
        '''

        xc = 0.0
        for a in ax:
            xc = min(xc, (a.yaxis.get_label()).get_position()[0])

        for a in ax:
            a.yaxis.set_label_coords(xc + x_offset,
                                     (a.yaxis.get_label()).get_position()[1])