In una figura matplotlib, come posso ridurre la dimensione del carattere per le etichette di tick usando ax1.set_xticklabels()
?
Inoltre, come è possibile ruotarlo da orizzontale a verticale?
In una figura matplotlib, come posso ridurre la dimensione del carattere per le etichette di tick usando ax1.set_xticklabels()
?
Inoltre, come è possibile ruotarlo da orizzontale a verticale?
Risposte:
Si noti che le versioni più recenti di MPL hanno un collegamento per questa attività. Un esempio è mostrato nell'altra risposta a questa domanda: https://stackoverflow.com/a/11386056/42346
Il codice seguente è a scopo illustrativo e potrebbe non essere necessariamente ottimizzato.
import matplotlib.pyplot as plt
import numpy as np
def xticklabels_example():
fig = plt.figure()
x = np.arange(20)
y1 = np.cos(x)
y2 = (x**2)
y3 = (x**3)
yn = (y1,y2,y3)
COLORS = ('b','g','k')
for i,y in enumerate(yn):
ax = fig.add_subplot(len(yn),1,i+1)
ax.plot(x, y, ls='solid', color=COLORS[i])
if i != len(yn) - 1:
# all but last
ax.set_xticklabels( () )
else:
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(14)
# specify integer or one of preset strings, e.g.
#tick.label.set_fontsize('x-small')
tick.label.set_rotation('vertical')
fig.suptitle('Matplotlib xticklabels Example')
plt.show()
if __name__ == '__main__':
xticklabels_example()
plt.setp
. (Inoltre, dai un'occhiata ax.tick_params
) Ad esempio, puoi semplicemente farlo plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)
. Inoltre, gli oggetti degli assi hanno un ax.is_last_row()
metodo che può essere utile in casi come il tuo esempio. Invece di if i != len...
, puoi farlo if not ax.is_last_row()
. (Perché è un metodo, non ne ho idea ... Matplotlib odia le proprietà, a quanto pare!)
is_last_row()
, grazie! Ho usato plt.setp
in passato e non ero necessariamente sicuro che rappresentasse un modo più canonico di personalizzare le etichette dei tick. Hai rimosso quel dubbio, grazie. Più in generale: le tue risposte, specialmente nel matplotlib
tag, spesso mi lasciano a bocca aperta. Continuate così.
plt.setp
è un "matlab-ism" e un loop esplicito è probabilmente molto più pitonico. Essere un convertito matlab, io stesso, mi setp
sento naturale, ma a ciascuno il suo. Entrambi sono abbastanza leggibili, imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
nonget_major_ticks
In realtà c'è un modo più semplice. Ho appena trovato:
import matplotlib.pyplot as plt
# We prepare the plot
fig, ax = plt.subplots()
# We change the fontsize of minor ticks label
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)
Ciò risponde solo alle dimensioni di una label
parte della domanda.
axis = 'x'
o axis = 'y'
per modificare solo uno degli assi
Per specificare contemporaneamente la dimensione e la rotazione del carattere, prova questo:
plt.xticks(fontsize=14, rotation=90)
In alternativa, puoi semplicemente fare:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
Un'altra alternativa
Ho due grafici affiancati e vorrei regolare le etichette tick separatamente.
Le soluzioni di cui sopra erano vicine ma non funzionavano per me. Ho trovato la mia soluzione da questa pagina matplotlib .
ax.xaxis.set_tick_params(labelsize=20)
Questo ha fatto il trucco ed era dritto al punto. Nel mio caso d'uso, era la trama a destra che doveva essere modificata. Per la trama a sinistra da quando stavo creando nuove etichette tick sono stato in grado di regolare il carattere nello stesso processo di impostazione delle etichette.
vale a dire
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
quindi ho usato la trama giusta,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Una sottigliezza minore ... lo so ... ma spero che questo aiuti qualcuno :)
Punti bonus se qualcuno sa come regolare la dimensione del carattere dell'etichetta dell'ordine di grandezza.
Puoi anche modificare i parametri di visualizzazione delle etichette come fontsize con una linea come questa:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
Per caratteri più piccoli, io uso
ax1.set_xticklabels(xticklabels, fontsize=7)
e funziona!