2013-07-02 26 views
8

Io uso autofmt_xdate per stampare etichette lunghe sull'asse x in modo leggibile. Il problema è che quando voglio combinare diverse sottotrame, l'etichetta dell'asse x delle altre sottotrame scompare, cosa che non apprezzo per la sottotramma più a sinistra nella figura in basso (due righe in alto). C'è un modo per impedire a autofmt_xdate di estinguere le altre etichette sull'asse x? O c'è un altro modo per ruotare le etichette? Come potete vedere ho sperimentato con xticks e "ruotato", ma i risultati non sono stati soddisfacenti perché le etichette sono state ruotate attorno al loro centro, il che ha provocato un'etichettatura disordinata.autofmt_xdate cancella le etichette sull'asse x di tutte le sottotrame

script che produce trama di seguito:

from matplotlib import pyplot as plt 
from numpy import arange 
import numpy 
from matplotlib import rc 

rc("figure",figsize=(15,10)) 
#rc('figure.subplot',bottom=0.1,hspace=0.1) 
rc("legend",fontsize=16) 
fig = plt.figure() 


Test_Data = numpy.random.normal(size=20) 

fig = plt.figure() 
Dimension = (2,3) 
plt.subplot2grid(Dimension, (0,0),rowspan=2) 
plt.plot(Test_Data) 
plt.subplot2grid(Dimension, (0,1),colspan=2) 
for i,j in zip(Test_Data,arange(len(Test_Data))): 
    plt.bar(i,j) 
plt.legend(arange(len(Test_Data))) 
plt.subplot2grid(Dimension, (1,1),colspan=2) 
xticks = [r"%s (%i)" % (a,b) for a,b in zip(Test_Data,Test_Data)] 
plt.xticks(arange(len(Test_Data)),xticks) 
fig.autofmt_xdate() 
plt.ylabel(r'$Some Latex Formula/Divided by some Latex Formula$',fontsize=14) 
plt.plot(Test_Data) 
#plt.setp(plt.xticks()[1],rotation=30) 
plt.tight_layout() 
#plt.show() 

Figure created by script

risposta

6

Questo è in realtà una caratteristica del metodo autofmt_xdate. Dalla documentazione del metodo autofmt_xdate:

Data ticklabels spesso si sovrappongono, quindi è utile per ruotare loro e giusto allinearle. Inoltre, un caso d'uso comune è un numero di sottotrame con xax condivisi in cui l'asse x è dati di data. I ticklabels sono spesso lunghi e aiutano a ruotarli nella sottotramma inferiore e disattivarli su altre subplot, nonché disattivare xlabels.

Se si desidera ruotare le xticklabels del solo la sottotrama in basso a destra, utilizzare

plt.setp(plt.xticks()[1], rotation=30, ha='right') # ha is the same as horizontalalignment 

Questa ruota i ticklabels 30 gradi e sinistra allinea loro (stesso risultato quando si utilizza autofmt_xdate) per il basso a destra sottotrama, lasciando invariate le altre due sottotrame.

Problemi correlati