Matplotlib verkleinert die Schriftgröße von Tick-Labels

299

Wie kann ich in einer Matplotlib-Figur die Schriftgröße für die Tick-Labels ax1.set_xticklabels()kleiner machen?

Wie kann man es außerdem von horizontal nach vertikal drehen?

Mach den Weg frei
quelle
Vielen Dank, dass Sie diese Frage gestellt haben. Ich versuche gerade, dieses Problem zu lösen. Ich bin hier nicht sehr einfühlsam, aber es sieht so aus, als ob die Wähler der Meinung sind, dass die beste Antwort nicht die akzeptierte ist. Was denken Sie?
Aaron Hall
Habe ich richtig gelesen, dass es mindestens 5 verschiedene Möglichkeiten gibt, die Schriftgröße in matplotlib zu ändern? : D
Famargar

Antworten:

127

Bitte beachten Sie, dass neuere Versionen von MPL eine Verknüpfung für diese Aufgabe haben. Ein Beispiel finden Sie in der anderen Antwort auf diese Frage: https://stackoverflow.com/a/11386056/42346

Der folgende Code dient nur zur Veranschaulichung und muss nicht unbedingt optimiert werden.

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()

Geben Sie hier die Bildbeschreibung ein

mechanisches Fleisch
quelle
84
Nur zur Seite: Anstatt die Tick-Label-Objekte zu durchlaufen, können Sie sie verwenden plt.setp. (Schauen Sie sich auch an ax.tick_params) Zum Beispiel können Sie einfach tun plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14). Außerdem verfügen Achsenobjekte über eine ax.is_last_row()Methode, die in Fällen wie Ihrem Beispiel nützlich sein kann. Stattdessen if i != len...können Sie tun if not ax.is_last_row(). (Warum es eine Methode ist, ich habe keine Ahnung ... Matplotlib hasst anscheinend Eigenschaften!)
Joe Kington
@ Joe: Ich höre zum ersten Mal davon is_last_row(), danke! Ich habe plt.setpin der Vergangenheit verwendet und war mir nicht unbedingt sicher, ob dies eine kanonischere Methode zum Anpassen von Tick-Labels darstellt. Sie haben diesen Zweifel beseitigt, danke. Allgemeiner: Ihre Antworten, insbesondere im matplotlibTag, lassen mich häufig beeindrucken. Mach weiter so.
mechanisches
1
Vielen Dank!! Ich schätze die freundlichen Worte, besonders von Ihnen! Canonical ist in diesem Fall sehr relativ. plt.setpist ein "Matlab-Ismus", und eine explizite Schleife ist wahrscheinlich viel pythonischer. Als Matlab-Konvertit setpfühle ich mich natürlich, aber für jeden das Richtige. Beide sind gut lesbar, imo
Joe Kington
50
In neuen Versionen stellte ich fest, dass Sie den Parameter labelsize verwenden mussten : zBax.tick_params(axis='x', labelsize=8)
Vladtn
Sollte get_ticklabelsnicht seinget_major_ticks
jez
506

Es gibt tatsächlich einen einfacheren Weg. Ich habe gerade gefunden:

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)

Dies entspricht jedoch nur der Größe eines labelTeils Ihrer Frage.

Autiwa
quelle
2
Verwenden Sie axis = 'x'oder axis = 'y', um nur eine der Achsen zu ändern
geliebt.von.Jesus
221

Versuchen Sie Folgendes, um sowohl die Schriftgröße als auch die Drehung gleichzeitig festzulegen:

plt.xticks(fontsize=14, rotation=90)
scottlittle
quelle
4
Beachten Sie, dass dies verwendet wird, wenn Sie mit einer MATLAB-ähnlichen Pyplot-Schnittstelle arbeiten. Bei objektorientierter Schnittstelle sollte die Methode tick_params () des Achsenobjekts oder die Methode set_tick_params () des Achsenobjekts verwendet werden (siehe andere Antworten).
Wombatonfire
54

Alternativ können Sie einfach Folgendes tun:

import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size 
user2468932
quelle
36
plt.tick_params(axis='both', which='minor', labelsize=12)
Jingweimo
quelle
Dies ist die einzige Antwort, die funktioniert, wenn Sie die Schriftgröße ändern möchten, ohne neue Beschriftungen festzulegen.
David Stansby
@ DavidStansby Ich glaube nicht, dass dies wahr ist. Ich hatte genau dieses Problem (oben erwähnt) und konnte eine andere Methode als diese Lösung verwenden. mitax.xaxis.set_tick_params(labelsize=20)
Kyle Swanson
1
einfachste Antwort, erfordert keinen Verweis auf
Axtobjekt
26

Eine andere Alternative

Ich habe zwei Diagramme nebeneinander und möchte die Tick-Labels separat anpassen.

Die oben genannten Lösungen waren nah, aber sie haben für mich nicht funktioniert. Ich habe meine Lösung auf dieser matplotlib- Seite gefunden .

ax.xaxis.set_tick_params(labelsize=20)

Dies hat den Trick gemacht und war direkt auf den Punkt. Für meinen Anwendungsfall musste das Diagramm auf der rechten Seite angepasst werden. Für das Grundstück auf der linken Seite , da ich neue Strichbeschriftungen war die Schaffung konnte ich die Schrift im gleichen Prozess einzustellen , wie Satz die Etiketten ing.

dh

ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)

also habe ich für die richtige Handlung verwendet,

ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)

Eine kleine Subtilität ... ich weiß ... aber ich hoffe das hilft jemandem :)

Bonuspunkte, wenn jemand weiß, wie die Schriftgröße der Beschriftung in der Größenordnung angepasst werden kann.

Geben Sie hier die Bildbeschreibung ein

Kyle Swanson
quelle
22

In aktuellen Versionen von Matplotlib können Sie dies tun axis.set_xticklabels(labels, fontsize='small').

Christoph
quelle
1
Das zwingt Sie, auch das anzugeben labels. Es ist besser, wenn wir nur die Schriftgröße ändern können.
Guimoute
16

Sie können auch Beschriftungsanzeigeparameter wie die Schriftgröße mit einer Zeile wie der folgenden ändern:

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
ATX_Bigfoot
quelle
1
Ich denke, dass die Verwendung von Listenverständnissen mit Nebenwirkungen nicht die beste Vorgehensweise ist. Ich würde vorschlagen, stattdessen einen Standard für die Schleife zu verwenden.
jjmontes
14

Für kleinere Schriftarten verwende ich

ax1.set_xticklabels(xticklabels, fontsize=7)

und es funktioniert!

Pengyao
quelle
Wie definieren Sie xticklabels?
mLstudent33
10

Folgendes hat bei mir funktioniert:

ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)

Der Vorteil der oben wird Sie nicht die zur Verfügung stellen muß arrayvon labelsund Arbeiten mit beliebigen Daten auf dem axes.

Kryptoman
quelle