This repository has been archived on 2021-05-17. You can view files and clone it, but cannot push or open issues or pull requests.
scientificComputing/plotstyle.py

116 lines
3.3 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['axes.spines.left'] = True # newer matplotlib only
#mpl.rcParams['axes.spines.bottom'] = True
#mpl.rcParams['axes.spines.top'] = False
#mpl.rcParams['axes.spines.right'] = False
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