import matplotlib as mpl import matplotlib.pyplot as plt # colors: colors = { 'red': '#CC0000', 'orange': '#FF9900', 'lightorange': '#FFCC00', 'yellow': '#FFFF66', 'green': '#99FF00', 'blue': '#0000FF' } def cm_size(*args): """ Convert dimensions from cm to inch. Use this function to set the size of a figure in centimeter: ``` fig = plt.figure(figsize=cm_size(16.0, 10.0)) ``` Parameters ---------- args: one or many float Size in centimeter. Returns ------- inches: float or list of floats Input arguments converted to inch. """ inch_per_cm = 2.54 if len(args) == 1: return args[0]/inch_per_cm else: return [v/inch_per_cm for v in args] def show_spines(ax, spines): """ Show and hide spines. Parameters ---------- ax: matplotlib figure, matplotlib axis, or list of matplotlib axes Axis whose spines and ticks are manipulated. If figure, then apply manipulations on all axes of the figure. If list of axes, apply manipulations on each of the given axes. spines: string Specify which spines and ticks should be shown. All other ones or hidden. 'l' is the left spine, 'r' the right spine, 't' the top one and 'b' the bottom one. E.g. 'lb' shows the left and bottom spine, and hides the top and and right spines, as well as their tick marks and labels. '' shows no spines at all. 'lrtb' shows all spines and tick marks. """ # collect spine visibility: xspines = [] if 't' in spines: xspines.append('top') if 'b' in spines: xspines.append('bottom') yspines = [] if 'l' in spines: yspines.append('left') if 'r' in spines: yspines.append('right') # collect axes: if isinstance(ax, (list, tuple)): axs = ax else: axs = ax.get_axes() if not isinstance(axs, (list, tuple)): axs = [axs] for ax in axs: # hide spines: if not 'top' in xspines: ax.spines['top'].set_visible(False) if not 'bottom' in xspines: ax.spines['bottom'].set_visible(False) if not 'left' in yspines: ax.spines['left'].set_visible(False) if not 'right' in yspines: ax.spines['right'].set_visible(False) # ticks: if len(xspines) == 0: ax.xaxis.set_ticks_position('none') ax.set_xticks([]) elif len(xspines) == 1: ax.xaxis.set_ticks_position(xspines[0]) else: ax.xaxis.set_ticks_position('both') if len(yspines) == 0: ax.yaxis.set_ticks_position('none') ax.set_yticks([]) elif len(yspines) == 1: ax.yaxis.set_ticks_position(yspines[0]) else: ax.yaxis.set_ticks_position('both') # initialization: plt.xkcd() mpl.rcParams['figure.facecolor'] = 'white' mpl.rcParams['xtick.direction'] = 'out' mpl.rcParams['ytick.direction'] = 'out' mpl.rcParams['xtick.major.size'] = 6 mpl.rcParams['ytick.major.size'] = 6 mpl.rcParams['xtick.major.width'] = 1.25 mpl.rcParams['ytick.major.width'] = 1.25