Jak na figurze matplotlib mogę zmienić rozmiar czcionki dla etykiet kleszczy, używając ax1.set_xticklabels()
mniejszej?
Ponadto, w jaki sposób można go obracać z poziomego na pionowy?
Jak na figurze matplotlib mogę zmienić rozmiar czcionki dla etykiet kleszczy, używając ax1.set_xticklabels()
mniejszej?
Ponadto, w jaki sposób można go obracać z poziomego na pionowy?
Odpowiedzi:
Uwaga: nowsze wersje MPL mają skrót do tego zadania. Przykład pokazano w innej odpowiedzi na to pytanie: https://stackoverflow.com/a/11386056/42346
Poniższy kod ma charakter poglądowy i niekoniecznie musi być zoptymalizowany.
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
. (Zobacz także ax.tick_params
) Na przykład możesz po prostu zrobić plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)
. Ponadto obiekty osi mają ax.is_last_row()
metodę, która może być przydatna w przypadkach takich jak twój przykład. Zamiast tego if i != len...
możesz zrobić if not ax.is_last_row()
. (Dlaczego to metoda, nie mam pojęcia ... Matplotlib nienawidzi właściwości, najwyraźniej!)
is_last_row()
, dziękuję! Używałem plt.setp
w przeszłości i niekoniecznie byłem pewien, że reprezentuje to bardziej kanoniczny sposób dostosowywania etykiet kleszczy. Dzięki temu usunąłeś wątpliwości. Mówiąc szerzej: twoje odpowiedzi, szczególnie w matplotlib
tagu, często mnie zachwycają. Kontynuujcie wspaniałą pracę.
plt.setp
jest „matlab-ism”, a wyraźna pętla jest prawdopodobnie znacznie bardziej pythoniczna. Będąc nawróconym matlabem, setp
czuję się naturalnie, ale każdy z nich ma swoje. Każdy z nich jest dość czytelny, imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
nieget_major_ticks
W rzeczywistości istnieje prostszy sposób. Właśnie znalazłem:
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)
To jednak odpowiada tylko na wielkość label
części twojego pytania.
axis = 'x'
lub, axis = 'y'
aby zmodyfikować tylko jedną z osi
Aby określić jednocześnie rozmiar i obrót czcionki, spróbuj tego:
plt.xticks(fontsize=14, rotation=90)
Alternatywnie możesz po prostu zrobić:
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)
Kolejna alternatywa
Mam dwie działki obok siebie i chciałbym osobno dopasowywać etykiety.
Powyższe rozwiązania były bliskie, ale dla mnie nie działały. Znalazłem rozwiązanie z tej strony matplotlib .
ax.xaxis.set_tick_params(labelsize=20)
To załatwiło sprawę i od razu do rzeczy. W moim przypadku należało dostosować działkę po prawej stronie. W przypadku wykresu po lewej, odkąd tworzyłem nowe etykiety kleszczy, byłem w stanie dostosować czcionkę w tym samym procesie, co ustawienie etykiet.
to znaczy
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
dlatego użyłem właściwej działki,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Drobna subtelność ... Wiem ... ale mam nadzieję, że to komuś pomoże :)
Punkty bonusowe, jeśli ktoś wie, jak dostosować rozmiar czcionki etykiety wielkości rzędu.
Możesz również zmienić parametry wyświetlania etykiety, takie jak rozmiar czcionki, za pomocą linii takiej jak ta:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
Używam mniejszej czcionki
ax1.set_xticklabels(xticklabels, fontsize=7)
i to działa!