10

I created a software to do signal analyses. There are multiple functions, and each finally display a complex figure containing labels, plot, axhspan, axvspan etc... Usually, these functions are called individually. Everyone of my functions returns a figure object, that I can save in pdf for example.

def Myfunction1(self):
    fig = pyplot.figure()
    ...do somestuff, create my figure
    pyplot.show()
    fig.savefig('C:\MyFigurefolder\figure1.pdf', dpi=300)
    return fig

def Myfunction2(self):
    fig = pyplot.figure()
    ...do some other stuff, create my 2nd figure
    pyplot.show()
    fig.savefig('C:\MyFigurefolder\figure2.pdf', dpi=300)
    return fig

Now, I would like to create a kind of "summary figure", by doing a metaanalyses, and pooling multiple figures together, and saving them in a final pdf. I don't really know how I should do that. Is there a way to use whole figure objects, (or maybe the multiple individual pdf) to do my figure?

Something like:

def FinalFigure(self):

    final = A_Kind_Of_Layout_Or_A_Figure_or_something

    a=self.Myfunction1()
    b=self.Myfunction2()

    Action_to_arrange_a_and_b_like_gridspec

    final.savefig('C:\MyFigurefolder\FinalFigure.pdf', dpi=300)
Seanny123
  • 8,776
  • 13
  • 68
  • 124
Vantoine
  • 225
  • 1
  • 3
  • 9

1 Answers1

11

You may combine several plots with matplotlib.pyplot.subplot. For more control on the layout, check out the GridSpec.

Edit: As requested, a short example from the linked tutorial:

A gridspec instance provides array-like (2d or 1d) indexing that returns the SubplotSpec instance. For, SubplotSpec that spans multiple cells, use slice.

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[-1,0])
ax5 = plt.subplot(gs[-1,-2])

enter image description here

HenriV
  • 458
  • 6
  • 15
  • 3
    For anyone reading this: if you prefer the **object-oriented** approach as I do, you can use `ax1 = fig.add_subplot(gs[0,:])`, etc. – Luke Davis Mar 30 '17 at 03:49