Skip to main content

Perfect matplotlib figures for latex

Project description

latexplotlib

image image image Actions status Coverage Status Ruff

Perfect matplotlib figures for latex.

Quickstart

  1. install latexplotlib:
pip install latexplotlib
  1. import latexplotlib and use latexplotlib style
import latexplotlib as lpl

lpl.style.use('latex10pt')
# lpl.style.use('latex10pt-minimal')
  1. replace all usages of plt with lpl. Only plt.subplots changes its behavior:
#  fig, axes = plt.subplots(2, 3)
fig, axes = lpl.subplots(2, 3)

Optional:

  1. get size of latex document
(\the\textwidth, \the\textheight)  % (412.123pt, 346.564pt)
  1. set lpl.size to size of latex document
lpl.size.set(412.123, 346.564)

Usage

This package has two basic functionalities. On the one hand, it sets sensible defaults for creating perfect figures for latex. This includes a color scheme optimized for color-blind people, correct font and font sizes, and sensible defaults to store the figure. On the other hand, it provides some functions to create perfectly sized figures. These figures fit your latex document without scaling and have the correct font size for your document.

latexplotlib styles

There are 6 different styles for matplotlib:

  • latex10pt-minimal
  • latex11pt-minimal
  • latex12pt-minimal
  • latex10pt
  • latex11pt
  • latex12pt

The *minimal versions change the font and the font sizes to ensure that the figures fonts match the latex font. This style is fully compatible with other styles:

import matplotlib.pyplot as plt
import numpy as np

import latexplotlib as lpl

lpl.style.use("latex10pt-minimal")
# lpl.size.set(200, 400)
with lpl.size.context(200, 400):
    fig, ax = lpl.subplots(1, 1)

x = np.linspace(1, 5, 100)

for t in range(4):
    label = f"$x^{t}$"
    ax.plot(x, x ** t, label=label)

ax.set_yscale("log")
ax.set_title("Perfect matplotlib figures for \\LaTeX")
ax.grid()

fig.legend()
fig.savefig("example_poly_minimal")
fig.savefig("example_poly_minimal.png")

The non-minimal versions set additional defaults to create figures that are accessible for color-blind people:

import matplotlib.pyplot as plt
import numpy as np


lpl.style.use("latex10pt")

# lpl.size.set(200, 400)
with lpl.size.context(200, 400):
    fig, ax = lpl.subplots(1, 1)

x = np.linspace(1, 5, 100)

for t in range(4):
    label = f"$x^{t}$"
    ax.plot(x, x ** t, label=label)

ax.set_yscale("log")
ax.set_title("Perfect matplotlib figures for \\LaTeX")
ax.grid()

fig.legend()
fig.savefig("example_poly")
fig.savefig("example_poly.png")

Both styles change the defaults of the plt.savefig command. The new defaults are

lpl.savefig(
    ...,
    bbox_inches=None,
    dpi=300,
    format="pdf",
    orientation="portrait",
    pad_inches=0.05
)

Get latex dimensions

You can find the width and height of your document using the following command:

\the\textwidth

\the\textheight

Set and get latex page size

import latexplotlib as lpl

lpl.size.set(200, 400)

with lpl.size.context(100, 200):
    lpl.size()  # 100, 200

lpl.size()  # (200, 400)

Create figures for latex

import latexplotlib as lpl


# A figure filling 75% of the latex page
_ = lpl.subplots(1, 1)

# A subplot filling 80% of the latex page
fig, axes = lpl.subplots(3, 2, scale=0.8)

# A subplot for 3 square plots next to each other
fig, axes = lpl.subplots(1, 3, scale=0.8, aspect='equal')

aspect keyword

The aspect keyword controls the ratio of height to width. The default is the Golden ratio. aspect can also be equal (i.e. aspect=1 )or auto. In the latter case, the figure fills the available space.

import latexplotlib as lpl

# A 3 by 2 figure where each subplots height to width ratio is the golden ratio
fig, axes = lpl.subplots(3, 2)

# A 3 by 2 figure where each subplot having a height to width ratio of 1:1
fig, axes = lpl.subplots(3, 2, aspect=1.0)

# A figure that is exactly 300pt height and 200pt wide
with lpl.size.context(200, 300):
    fig, axes = lpl.subplots(3, 2, aspect="auto")

Include figures in Latex

The most important part of including the figures in latex is to not set the size of the figure using arguments like [width=...]:

\includegraphics{test.pdf}

Observe that we did NOT adjust the size using arguments like [width=...]:

\includegraphics[width=\textwidth]{test.pdf}

plt.tight_layout()

plt.tight_layout() changes the size of the produced figure. As such it is recommended to not use plt.tight_layout() at all! The same is true for savefig(..., bbox_inches=None)!

Instead all latexplotlib styles used constrained_layout by default. constrained_layout has a similar functionality compared to tight_layout, however it is fully deterministic and does not change the size of the underlying figure.

References

This package is inspired by the following sources:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

latexplotlib-0.8.3.tar.gz (17.5 kB view details)

Uploaded Source

File details

Details for the file latexplotlib-0.8.3.tar.gz.

File metadata

  • Download URL: latexplotlib-0.8.3.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for latexplotlib-0.8.3.tar.gz
Algorithm Hash digest
SHA256 ccda8ee8c483bf7322a738545e6f7c99ca18e75e5045f395e4632f37a921ee74
MD5 2b89deeb657492e58498978b27efc849
BLAKE2b-256 1335fa4d99d937a43a4e791b586f78e1c3c5263c0bb498e7f1def666a817840d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page