Skip to content

Mods to `matplotlib` to make it play nicely with LaTeX documents.

License

Notifications You must be signed in to change notification settings

eringrant/niceplotlib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

niceplotlib

Mods to matplotlib to make it play nicely with LaTeX documents.

Nota bene: This package is deprecated; I use tueplots now :)

Installation

To install via pip on the command line, do:

python -m pip install git+https://github.com/eringrant/niceplotlib

The dependency can also be added to a requirements.txt or environment.yml file as:

niceplotlib @ git+https://github.com/eringrant/niceplotlib

Usage

Start with importing the package in a Python script that produces matplotlib plots, which sets some text and color defaults:

import niceplotlib as npl

The package also includes utilities for sizing plots. See also "Saving plots" and "Including plots" for guidelines on the steps that follow.

Sizing plots

Determining the target plot width from TeX

First, determine text or column width of your target TeX document. Add the statement \showthe\textwidth (\showthe\columnwidth for two-column format) to your document:

\documentclass{report}
\begin{document}

...

\showthe\textwidth

...

\end{document}

Then compile the document; the output will give something like:

> 345.0pt.
l.5 \showthe\textwidth

345 is your document's width and is therefore the maximum width for an unscaled plot in your document. Start with 345 as the width passed to npl.set_size, and adjust as needed.

Using niceplotlib.set_size to size matplotlib plots

Pass the target width determined above to npl.set_size as the figsize when creating a matplotlib plot. A minimal example is:

import niceplotlib as npl
import numpy as np

# Plot
x = np.linspace(0, 2*np.pi, 100)
fig, ax = plt.subplots(1, 1, figsize=npl.set_size(width))
ax.plot(x, np.sin(x))
ax.set_xlim(0, 2 * np.pi)
ax.set_xlabel(r'$\theta$')
ax.set_ylabel(r'$\sin (\theta)$')

Saving plots

Plots should be saved in a vector format to prevent pixelation. Use either PDF:

fig.savefig('example.pdf', format='pdf', bbox_inches='tight')

Or SVG, though you will have to do some extra work for conversion:

fig.savefig('example.svg', format='svg', bbox_inches='tight')

Including plots

Include the figure saved above into the TeX document using the graphicx package:

\begin{figure}
  \centering
  \includegraphics{example.pdf}
\end{figure}

Ideally, the figure can be included just so without scaling in TeX! If the figure still isn't quite the right size, resize by tuning the target width in the instructions under "Sizing plots".

References & acknowledgements

This package is heavily inspired by Jack Walton's post on "Plot publication-quality figures with matplotlib and LaTeX."

About

Mods to `matplotlib` to make it play nicely with LaTeX documents.

Resources

License

Stars

Watchers

Forks

Languages