# 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, smart_bounds=False):
"""
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))
spine.set_smart_bounds(smart_bounds)
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])