112 lines
3.2 KiB
Python
112 lines
3.2 KiB
Python
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
|
|
|