matplotlib: make plots in functions and then add each to a single subplot figure

Question:

I haven’t been able to find a solution to this.. Say I define some plotting function so that I don’t have to copy-paste tons of code every time I make similar plots…

What I’d like to do is use this function to create a few different plots individually and then put them together as subplots into one figure. Is this even possible? I’ve tried the following but it just returns blanks:

import numpy as np
import matplotlib.pyplot as plt

# function to make boxplots
def make_boxplots(box_data):

    fig, ax = plt.subplots()

    box = ax.boxplot(box_data)

    #plt.show()

    return ax

# make some data:
data_1 = np.random.normal(0,1,500)
data_2 = np.random.normal(0,1.1,500)

# plot it
box1 = make_boxplots(box_data=data_1)
box2 = make_boxplots(box_data=data_2)

plt.close('all')

fig, ax = plt.subplots(2)

ax[0] = box1
ax[1] = box2

plt.show()
Asked By: fffrost

||

Answers:

I tend to use the following template

def plot_something(data, ax=None, **kwargs):
    ax = ax or plt.gca()
    # Do some cool data transformations...
    return ax.boxplot(data, **kwargs)

Then you can experiment with your plotting function by simply calling plot_something(my_data) and you can specify which axes to use like so.

fig, (ax1, ax2) = plt.subplots(2)
plot_something(data1, ax1, color='blue')
plot_something(data2, ax2, color='red')
plt.show()  # This should NOT be called inside plot_something()

Adding the kwargs allows you to pass in arbitrary parameters to the plotting function such as labels, line styles, or colours.

The line ax = ax or plt.gca() uses the axes you have specified or gets the current axes from matplotlib (which may be new axes if you haven’t created any yet).

Answered By: Till Hoffmann
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.