How should I pass a matplotlib object through a function; as Axis, Axes or Figure?

When passing matplotlib objects through functions, you typically work with Axes objects for individual subplots, Figure objects for the entire figure, or iterate through multiple axes. Here's how to properly structure functions that accept matplotlib objects.

Understanding Matplotlib Objects

The main matplotlib objects you'll pass through functions are:

  • Figure − The entire figure containing all plots
  • Axes − Individual subplot areas where you draw
  • Array of Axes − Multiple subplot objects when using subplots

Example: Passing Axes Objects

Here's a complete example showing how to pass matplotlib objects through functions ?

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

def plot_data(ax, x, y):
    """Function that accepts an Axes object"""
    ax.plot(x, y)
    ax.set_title(f"Plot with {len(x)} points")

def create_profile(rows, cols):
    """Function that creates subplots and calls plotting function"""
    fig, axes = plt.subplots(rows, cols)
    
    # Handle different cases for axes array structure
    if rows == 1 and cols == 1:
        # Single subplot - axes is just one Axes object
        x_data = np.random.rand(10)
        y_data = np.random.rand(10)
        plot_data(axes, x_data, y_data)
    elif rows == 1 or cols == 1:
        # Single row or column - axes is 1D array
        for ax in axes:
            x_data = np.random.rand(10)
            y_data = np.random.rand(10)
            plot_data(ax, x_data, y_data)
    else:
        # Multiple rows and columns - axes is 2D array
        for row in axes:
            for ax in row:
                x_data = np.random.rand(10)
                y_data = np.random.rand(10)
                plot_data(ax, x_data, y_data)
    
    return fig

# Create the profile with 3 rows and 4 columns
figure = create_profile(3, 4)
plt.show()

Best Practices

When designing functions that work with matplotlib objects:

  • Accept Axes objects − Most plotting functions should accept an ax parameter
  • Handle different subplot structures − Check if axes is 1D, 2D, or single object
  • Return Figure objects − Useful for saving or further manipulation
  • Use descriptive parameter namesax for single axes, fig for figures

Alternative Approach with Figure Object

import numpy as np
from matplotlib import pyplot as plt

def modify_figure(fig):
    """Function that accepts a Figure object"""
    fig.suptitle("Custom Figure Title")
    fig.patch.set_facecolor('lightgray')

def create_and_modify_plot():
    fig, ax = plt.subplots(2, 2, figsize=(8, 6))
    
    # Plot some data
    for i, axis in enumerate(ax.flat):
        x = np.linspace(0, 10, 50)
        y = np.sin(x + i)
        axis.plot(x, y)
        axis.set_title(f"Subplot {i+1}")
    
    # Pass figure to another function
    modify_figure(fig)
    
    return fig

figure = create_and_modify_plot()
plt.show()

Conclusion

Pass Axes objects for individual plotting functions and Figure objects for overall figure modifications. Handle different subplot array structures properly to avoid indexing errors when iterating through multiple axes.

Updated on: 2026-03-26T02:33:56+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements