13

I checked this SO Matplotlib returning a plot object but it does not really fit to my question.

What I would like to do is:

def func1():
   fig1 =  plt.plot (np.arange(0.0, 5.0, 0.1))
   return fig1

def func2()
   return plt.plot (np.arange(0.0, 5.0, 0.02))


fig1 = func1()
fig2 = func2()
plt.figure()
plt.add_subplot(fig1)
plt.add_subplot(fig2)
plt.show()

The above code is just a main idea. Could you suggest me how to do?

Thanks

1
  • rather than returning something like fig object you might consider passing Axis to your plotting functions instead. Commented Aug 28, 2018 at 9:35

1 Answer 1

13

The idea would be to let your functions plot to an axes. Either you provide this axes as argument to the function or you let it take the current axes.

import matplotlib.pyplot as plt
import numpy as np

def func1(ax=None):
    ax = ax or plt.gca()
    line, = ax.plot (np.arange(0.0, 5.0, 0.1))
    return line

def func2(ax=None):
    ax = ax or plt.gca()
    line, = ax.plot (np.arange(0.0, 5.0, 0.02))
    return line


fig, (ax1,ax2) = plt.subplots(ncols=2)
func1(ax1)
func2(ax2)

plt.show()
Sign up to request clarification or add additional context in comments.

2 Comments

So the other way around is impossible?
@MasterScrat No, very little is impossible. But matplotlib is not designed to have artists copied between figures. So any other solution becomes utterly complicated (and is unsupported). See this answer for the principle - which might already not work anymore by now.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.