2012-09-11 11 views
5

Ich versuche, ein Diagramm mit 7 Teilplots zu erstellen. Im Moment bin ich Plotten zwei Spalten, eine mit vier Parzellen und das andere mit drei, also wie folgt aus: enter image description hereMatplotlib: Neupositionierung eines Teilplots in einem Raster von Teilplots

Ich Konstruieren dieses Grundstück in der folowing Art und Weise:

#! /usr/bin/env python 
    import numpy as plotting 
    import matplotlib 
    from pylab import * 
    x = np.random.rand(20) 
    y = np.random.rand(20) 
    fig = figure(figsize=(6.5,12)) 
    subplots_adjust(wspace=0.2,hspace=0.2) 
    iplot = 420 
    for i in range(7): 
     iplot += 1 
     ax = fig.add_subplot(iplot) 
     ax.plot(x,y,'ko') 
     ax.set_xlabel("x") 
     ax.set_ylabel("y") 
    savefig("subplots_example.png",bbox_inches='tight') 

Allerdings habe ich für die Veröffentlichung denke, das sieht ein bisschen hässlich aus - was ich tun möchte, ist, den letzten Teil in die Mitte zwischen den beiden Spalten zu bewegen. Also, was ist der beste Weg, um die Position des letzten Subplots so anzupassen, dass es zentriert ist? I.e. die ersten 6 Teilplots in einem 3X2-Raster und den letzten darunter liegenden Teilplot zwischen den beiden Spalten zu haben. Wenn möglich, würde Ich mag Lage sein, die for Schleife zu halten, so dass ich einfach nutzen:

if i == 6: 
     # do something to reposition/centre this plot  

Danke,

Alex

+0

hat es ein 3x2 Gitter sein? – Harpal

Antwort

5

Wenn Sie die for-Schleife behalten möchten, können Sie Ihre Diagramme mit subplot2grid arrangieren können, was erlaubt für einen colspan Parameter:

#! /usr/bin/env python 
import numpy as plotting 
import matplotlib 
from pylab import * 
x = np.random.rand(20) 
y = np.random.rand(20) 
fig = figure(figsize=(6.5,12)) 
subplots_adjust(wspace=0.2,hspace=0.2) 
iplot = 420 
for i in range(7): 
    iplot += 1 
    if i == 6: 
     ax = subplot2grid((4,8), (i/2, 2), colspan=4) 
    else: 
     # You can be fancy and use subplot2grid for each plot, which dosen't 
     # require keeping the iplot variable: 
     # ax = subplot2grid((4,2), (i/2,i%2)) 

     # Or you can keep using add_subplot, which may be simpler: 
     ax = fig.add_subplot(iplot) 
    ax.plot(x,y,'ko') 
    ax.set_xlabel("x") 
    ax.set_ylabel("y") 
savefig("subplots_example.png",bbox_inches='tight') 

subplots in a grid with colspan

8

Raster verwenden spec (doc) mit einem 4x4-Raster und haben jede Parzelle Spannweite 2 Spalten als solche:

import matplotlib.gridspec as gridspec 
gs = gridspec.GridSpec(4, 4) 
ax1 = plt.subplot(gs[0, 0:2]) 
ax2 = plt.subplot(gs[0,2:]) 
ax3 = plt.subplot(gs[1,0:2]) 
ax4 = plt.subplot(gs[1,2:]) 
ax5 = plt.subplot(gs[2,0:2]) 
ax6 = plt.subplot(gs[2,2:]) 
ax7 = plt.subplot(gs[3,1:3]) 
fig = gcf() 
gs.tight_layout(fig) 
ax_lst = [ax1,ax2,ax3,ax4,ax5,ax6,ax7] 
+0

Das funktioniert perfekt. Sie können den Abstand zwischen den Gittern steuern, indem Sie die markierte Achse usw. unter Verwendung von Standard-Matplotlib-Techniken verwenden - IE 'fig = plt.figure (figsize = (10,15))' dann nach dem Aufruf jedes Teilplots/Gitters 'gs .tight_layout (fig) ' – AGS

+0

Eine sehr gute Antwort! Vielen Dank! –

Verwandte Themen