2017-10-11 3 views
1

J'essaie de créer un graphique de sous-trames où chaque sous-tréma comprend deux sous-trames partageant l'axe des x. J'ai essayé le code suivant:Sous-trames Python avec boucle d'axe partagée

gs_top = plt.GridSpec(6, 3, hspace = 0.0001) 
gs_base = plt.GridSpec(6, 3, hspace = 0.95) 

f2 = plt.figure() 

for i in range(9): 
    up_id = [0,1,2,6,7,8,12,13,15] 
    bot_id = [3,4,5,9,10,11,15,16,17] 

    axarr2 = f2.add_subplot(gs_top[up_id[i]]) 


    axarr2.plot() 

    ax_sub = f2.add_subplot(gs_base[bot_id[i]], sharex= axarr2) 
    ax_sub.imshow() 
    axarr2.set_title('title') 
    axarr2.xaxis.set_visible(False) 

Comment dois-je configurer les paramètres plt.GridSpec()?

Répondre

0

Je suppose que vous voulez utiliser gridspec.GridSpecFromSubplotSpec pour créer un autre gridspec dans un gridspec. Donc, en supposant que vous voulez une grille 3 x 3 et chaque cellule doit comprendre deux sous-placettes, verticalement attachés les uns aux autres et partageant leurs axes x.

import matplotlib.gridspec as gridspec 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
gs = gridspec.GridSpec(3, 3, hspace=0.6,wspace=0.3) 

for i in range(9): 
    gss = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec=gs[i], 
              hspace=0.0) 

    ax0 = fig.add_subplot(gss[0]) 
    ax1 = fig.add_subplot(gss[1], sharex=ax0) 

    x = np.linspace(0,6*np.pi) 
    y = np.sin(x) 
    ax0.plot(x,y) 
    ax1.plot(x/2,y) 

    ax0.set_title('title {}'.format(i)) 
    ax0.tick_params(axis="x", labelbottom=0) 

plt.show() 

3 x 3 GridSpec with 2 x 1 GridSpecFromSubplotSpec