Practical Machine Learning

Guides in Machine Learning and Linux

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 which creates all the plots. Copy the following script into 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).


Running the above with python 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:



    \caption{A simple EMA plot.\label{fig:ema1}}


ema plot example

Thank you Dan for the suggested changes to my script