Figure Sizing

One of PubPlotLib’s key features is automatic figure sizing for publication-ready dimensions.

Basic Sizing

By default, figures are sized according to the selected style:

import pubplotlib as pplt

# Single-column figure (default)
fig, ax = pplt.subplots(style='aanda')

# Double-column figure
fig, ax = pplt.subplots(style='aanda', twocols=True)

# Full-page figure (spans the entire page text width)
fig, ax = pplt.subplots(style='aanda', fullpage=True)

The width is set automatically, and the height is calculated using the golden ratio. If a style does not explicitly define a fullpage width, PubPlotLib will fallback to the largest available column width defined. fullpage=True takes precedence over twocols=True.

Fractional Widths

Sometimes you might want to create sub-panels as separate image files and compose them horizontally (e.g. side-by-side) in your final document. Use the width_fraction parameter (a float from 0 to 1) to scale only the width while leaving the originally calculated height intact:

import pubplotlib as pplt

# Creates a figure that is 1/3 the width of a full page,
# but maintains the original height of a full-page figure
fig, ax = pplt.subplots(
    style='aanda',
    fullpage=True,
    width_fraction=0.333
)

Custom Height

Control the height using the height_ratio parameter:

import pubplotlib as pplt

# height = width * height_ratio
fig, ax = pplt.subplots(
    style='aanda',
    height_ratio=0.5  # Wider, shorter figure
)

Examples of common aspect ratios:

  • height_ratio=0.5: Wide, short figure (good for time series)

  • height_ratio=1.0: Nearly square

  • height_ratio=pplt.golden or None (default): Golden ratio

  • height_ratio=1.5: Tall, narrow figure (good for profiles)

  • height_ratio=2.0: Very tall figure

Accessing Style Dimensions

You can access the column widths directly:

import pubplotlib as pplt

s = pplt.style.get('aanda')
print(f"One-column width: {s.onecol} inches")
print(f"Two-column width: {s.twocol} inches")

Or get the current style’s dimensions:

import pubplotlib as pplt

pplt.style.use('aanda')
s = pplt.style.get()  # Gets current style
print(s.onecol, s.twocol)

Using with Standard Matplotlib

If you want to use standard Matplotlib but need the correct dimensions:

import matplotlib.pyplot as plt
import pubplotlib as pplt

s = pplt.style.get('aanda')
width = s.onecol
height = width / pplt.golden  # or width * height_ratio

fig, ax = plt.subplots(figsize=(width, height))
ax.plot([1, 2, 3], [1, 4, 9])

Important Notes

Don’t Override Dimensions in LaTeX

When using figures in LaTeX, do NOT specify width in \includegraphics:

% WRONG - corrupts font sizes
\includegraphics[width=\textwidth]{figure.pdf}

% CORRECT - use default dimensions
\includegraphics{figure.pdf}

Don’t Exceed Canvas Bounds

Keep all plot elements within the figure canvas. Adding elements outside the (0,1) range will enlarge the figure and break the sizing.

Golden Ratio

PubPlotLib uses the golden ratio (φ ≈ 1.618) as the default height ratio:

import pubplotlib as pplt

print(pplt.golden)  # ~1.618
# Default height = width / pplt.golden

You can use it explicitly:

fig, ax = pplt.subplots(height_ratio=1/pplt.golden)

Subplots with Custom Sizing

For subplots, the overall figure size follows the styling rules:

import pubplotlib as pplt

fig, (ax1, ax2) = pplt.subplots(
    style='aanda',
    nrows=2,
    ncols=1,
    height_ratio=1.5  # Tall figure for two stacked plots
)

ax1.plot([1, 2, 3], [1, 4, 9])
ax2.plot([1, 2, 3], [9, 4, 1])