2014-05-24 24 views
6

Sto scrivendo una funzione che modifica le dimensioni e la posizione degli assi su una figura, ma quando arriva doppia assi fa un problema:matplotlib ottenere tutti gli assi che una data cifra contiene applicare alcune impostazioni

import matplotlib.pyplot as plt 

def fig_layout(fig, vspace = 0.3): # function to make space at the bottom for legend box and 
            #+ other text input 
    for ax in ~~~fig.axes~~~: # Here 'fig.axes' is not right, I need to find the exact syntax 
           #+ I need to put 
     box = ax.get_position() 
     ax.set_position([box.x0, box.y0 + box.height * vspace, 
     box.width, box.height * (1 - vspace)]) 

x = np.arange(10) 
fig = plt.figure() 
ax1 = fig.add_subplot(1, 1, 1) 
n = 3 
line = {} 
for i in range(3): 
    line['lines'].append(ax1.plot(x, i*x**2)) 
    line['labels'].append(r'$y = %i \cdot x^2$'%i) 
ax1.set_title('example plot') 

ax2 = ax1.twinx() 
line['lines'].append(ax2.plot(x, x^-1, label = r'$y = x^-1$')) 
line['labels'].append(r'$y = x^-1$') 
leg = ax1.legend(line['lines'], line['labels']) 
fig_layout(fig) 
# I will put the legend box at the bottom of the axes with another function. 
plt.show() 

risposta

14

Penso che tu possa usare fig.get_axes().

Ad esempio, per modificare il titolo del primo sub-plot, si può fare:

plt.gcf().get_axes()[0].set_title("example plot")