2015-07-17 15 views
7

Ho un grafico matplotlib in python con 3 sottotrame, tutto in 1 colonna.Spaziatura tra alcune sottotrame ma non tutte

Attualmente controllare l'altezza di ogni sottotrama con:

gridspec.GridSpec(3, 1, height_ratios=[1, 3, 3]) 

ho spaziatura attraverso:

plt.subplots_adjust(hspace=0.0) 

Ma vorrebbe mettere qualche distanza tra riga 2 e 3 solo.

In una delle altre risposte, ho letto che posso fare qualcosa di simile:

gs1.update(left=0.05, right=0.48, wspace=0) 

Ma non ho davvero capire cosa sta succedendo. Qualcuno potrebbe darmi qualche altra informazione, per favore?

risposta

12

Quando si chiama aggiornamento, si applicano quei parametri a tutte le sottotrame in quel particolare gridspec. Se si desidera utilizzare parametri diversi per sottotrame diverse, è possibile creare più gridspecs. Tuttavia, dovrai assicurarti che abbiano le dimensioni corrette e che non si sovrappongano. Un modo per farlo è con gridspecs annidati. Poiché l'altezza totale dei due grafici in basso è 6 volte superiore, la griglia esterna avrà un rapporto in altezza di [1, 6].

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 


def do_stuff(cell): #just so the plots show up 
    ax = plt.subplot(cell) 
    ax.plot() 
    ax.get_xaxis().set_visible(False) 
    ax.get_yaxis().set_visible(False) 
plt.subplots_adjust(hspace=0.0) 
#make outer gridspec 
outer = gridspec.GridSpec(2, 1, height_ratios = [1, 6]) 
#make nested gridspecs 
gs1 = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec = outer[0]) 
gs2 = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec = outer[1], hspace = .05) 
for cell in gs1: 
    do_stuff(cell) 
for cell in gs2: 
    do_stuff(cell) 
plt.show() 

Plot with three subplots

+0

questo ha funzionato per me, può confermare – jimh

Problemi correlati