Native Looking matplotlib Plots in LaTeX
I write most of my math/numerical analysis scripts in Python, and I tend to use matplotlib for plotting.
When including a matplotlib plot in LaTeX I got the highest quality results by saving the plot as a PDF and using \includegraphics{plot.pdf}
in LaTeX.
However, it bothered me that the plot had different fonts and font sizes than the rest of the document.
Here’s how I fixed that.
Figure Width
I always choose the size of my plots as a percentage of the text width.
For example width=0.6\textwidth
.
This allows me to use 0.3\textwidth
for images that are going to be side-by-side and not worry about absolute sizes.
We want matplotlib to output the right size plot so we need to find what exactly the textwidth
is and tell matplotlib.
Do this by writing \the\textwidth
inside your LaTeX document (inside the document, not the preamble) and running it through pdflatex
or whatever LaTeX engine you use.
You’ll find that LaTeX will replace the command with some number.
Record this number.
Generate Figures
For every LaTeX document that has plots, I write a script figures.py
which creates all the plots.
Copy the following script into figures.py
and save it into the same folder as your LaTeX document.
Replace fig_width_pt
with whatever number you got from above.
You must import matplotlib
and make any rc changes before importing matplotlib.pyplot
.
matplotlib expresses sizes in inches, while LaTeX likes sizes to be in pt, so the first part of this script sets up sizes in matplotlib properly.
The figure height is determined by the golden ratio, which is highly aesthetic ratio (it’s a good default).
LaTeX
Running the above with python figures.py
produces two files: ema.pdf
and ema.pgf
.
The PDF file is used just to have a stand-alone version of the plot and make sure everything looks right.
To incorporate the plot into LaTeX, put \usepackage{pgf}
in the preamble and insert using \input{ema.pgf}
.
For example:
\documentclass{article}
\usepackage{pgf}
\begin{document}
\begin{figure}
\caption{A simple EMA plot.\label{fig:ema1}}
\centering
\input{ema.pgf}
\end{figure}
\end{document}
Thank you Dan for the suggested changes to my script