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?
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?
Antworten:
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()
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!)
is_last_row()
, danke! Ich habe plt.setp
in 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 matplotlib
Tag, lassen mich häufig beeindrucken. Mach weiter so.
plt.setp
ist ein "Matlab-Ismus", und eine explizite Schleife ist wahrscheinlich viel pythonischer. Als Matlab-Konvertit setp
fühle ich mich natürlich, aber für jeden das Richtige. Beide sind gut lesbar, imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
nicht seinget_major_ticks
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 label
Teils Ihrer Frage.
axis = 'x'
oder axis = 'y'
, um nur eine der Achsen zu ändern
Versuchen Sie Folgendes, um sowohl die Schriftgröße als auch die Drehung gleichzeitig festzulegen:
plt.xticks(fontsize=14, rotation=90)
Alternativ können Sie einfach Folgendes tun:
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)
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.
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()]
Für kleinere Schriftarten verwende ich
ax1.set_xticklabels(xticklabels, fontsize=7)
und es funktioniert!