Publication-quality matplotlib figures

We're going to go from this...
... to this

Install prettyplotlib, a useful tool for graph styling

sudo pip install prettyplotlib 
Add a new method to style the axes to prettyplotlib/ 

def styling(ax, xpad=10.0, ypad=10.0, axiswidth=2.0, axistickwidth=2.0, axiscolor="#333333"):

    for axis in ['bottom','left']: ax.spines[axis].set_linewidth(axiswidth)

    for tick in ax.get_xaxis().get_major_ticks():
        tick.label1 = tick._get_text1()

    for tick in ax.get_yaxis().get_major_ticks():
        tick.label1 = tick._get_text1()

    ax.get_yaxis().set_tick_params(direction='out', width=axistickwidth)
    ax.get_xaxis().set_tick_params(direction='out', width=axistickwidth)


    ax.tick_params(axis='x', colors=axiscolor)
    ax.tick_params(axis='y', colors=axiscolor)

Set figure size to be smaller, load a color-brewer set from prettyplotlib

from prettyplotlib.colors import set2
fig = plt.figure(figsize=[4.35,4.35],dpi=300)

Plot the curves with more color

ax.errorbar(XA, YA, yerr=YAerr,fmt='o', color='black',  ecolor='black', capthick=2, elinewidth=3, capsize=2)
X2 = np.linspace(300, 900, 100)
ax.plot(X2, zwanzig(X2, poptA[0], poptA[1]), color=set2[0], lw=2, alpha=0.66, label="Zwanzig")
ax.plot(X2, boring(X2, poptB[0], poptB[1]), color=set2[3], lw=2, alpha=0.66, label="Boltzman", ls='--')

Equations could you use more color, larger fonts too

ax.text(350, 1e-0, r'$D_{0}= 5.5 \times  10^{-5} cm^2 / s$', fontsize=15, color=set2[3])
ax.text(350, 0.5e-0, r'$\epsilon_{RT}= 6.1$', fontsize=15, color=set2[3])

ax.text(600, 1e-1, r'$D_{0}= 0.8 \times  10^{-5} cm^2 / s$', fontsize=15, color=set2[0])
ax.text(600, 0.5e-1, r'$\epsilon_{RT}= 2.2$', fontsize=15, color=set2[0])

Clean-up and style the figure

ppl.utils.remove_chartjunk(ax,['top', 'right' ])

Install Calabri-like fonts on ubuntu

sudo apt-get install fonts-crosextra-caladea fonts-crosextra-carlito

Clear matplotlib font cache
import matplotlib

Load the new fonts at the top of your script

import matplotlib.font_manager as fm
prop = fm.FontProperties(fname='/usr/share/fonts/truetype/crosextra/Carlito-Regular.ttf')
matplotlib.rcParams[''] = prop.get_name()
matplotlib.rcParams['mathtext.fontset'] = 'custom'
matplotlib.rcParams['mathtext.rm'] = 'Carlito'
matplotlib.rcParams[''] = 'Carlito'
matplotlib.rcParams[''] = 'Carlito:bold'



Popular posts from this blog

React.js – edit and delete comments in CommentBox

ROCS-like shape overlap in rdkit

Example slurm cluster on your laptop (multiple VMs via vagrant)