2015-02-26 16 views
6

Sto provando a creare una funzione di stampa che prende come input il numero di grafici richiesti e li stampa utilizzando pylab.subplots e l'opzione sharex=True. Se il numero di grafici richiesti è dispari, desidero rimuovere l'ultimo pannello e forzare le etichette di spunta sul pannello proprio sopra di esso. Non riesco a trovare un modo per farlo e usare l'opzione sharex=True allo stesso tempo. Il numero di sottotrame può essere abbastanza grande (> 20).matplotlib con numero dispari di sottotrame

Ecco il codice di esempio. In questo esempio voglio forzare le etichette xtick quando i=3.

import numpy as np 
import matplotlib.pylab as plt 

def main(): 
    n = 5 
    nx = 100 
    x = np.arange(nx) 
    if n % 2 == 0: 
     f, axs = plt.subplots(n/2, 2, sharex=True) 
    else: 
     f, axs = plt.subplots(n/2+1, 2, sharex=True) 
    for i in range(n): 
     y = np.random.rand(nx) 
     if i % 2 == 0: 
      axs[i/2, 0].plot(x, y, '-', label='plot '+str(i+1)) 
      axs[i/2, 0].legend() 
     else: 
      axs[i/2, 1].plot(x, y, '-', label='plot '+str(i+1)) 
      axs[i/2, 1].legend() 
    if n % 2 != 0: 
     f.delaxes(axs[i/2, 1]) 
    f.show() 


if __name__ == "__main__": 
    main() 

risposta

7

Se si sostituisce lo scorso if nella funzione main con questo:

if n % 2 != 0: 
    for l in axs[i/2-1,1].get_xaxis().get_majorticklabels(): 
     l.set_visible(True) 
    f.delaxes(axs[i/2, 1]) 

f.show() 

Si dovrebbe fare il trucco:

Plot

Problemi correlati