Odpowiedzi:
Alternatywnie, jeśli chcesz po prostu ustawić liczbę taktów, pozwalając matplotlib na ich pozycjonowanie (obecnie tylko z MaxNLocator), jest pyplot.locator_params,
pyplot.locator_params(nbins=4)
Możesz określić konkretną oś w tej metodzie, jak wspomniano poniżej, domyślnie są to:
# To specify the number of ticks on both or any single axes
pyplot.locator_params(axis='y', nbins=6)
pyplot.locator_params(axis='x', nbins=10)
numtickszamiastnbins
numticksrozwiązanie dla wykresów logarytmicznych, jak wskazał @meduz?
[0, 1, ..., 99]a teraz jeden zestaw nticks=10, to nowe rzadkie etykiety zostaną umieszczone dziesięć razy dalej od siebie wzdłuż osi, tj. Teraz 1będą siedzieć tam 9, 2gdzie 19było , gdzie było ... i 9gdzie 99było.
Jeśli ktoś nadal wyświetla tę stronę w wynikach wyszukiwania:
fig, ax = plt.subplots()
plt.plot(...)
every_nth = 4
for n, label in enumerate(ax.xaxis.get_ticklabels()):
if n % every_nth != 0:
label.set_visible(False)
Aby rozwiązać ten problem i dostosowywania wyglądu kleszczy, zobacz Tick lokalizatory instrukcji na stronie matplotlib
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
Ustawiłby całkowitą liczbę taktów na osi X na 3 i równomiernie rozłożyłby ją na osi.
Jest też fajny tutorial na ten temat
ax = df.plot()
pandas.DataFrame) z indeksem datetime [2019-01-01, ... 2019-11-01], call ax = df.plot(), zwróć obiekt figury. ax.xaxis.set_major_locator(plt.MaxNLocator(3)) tylko połączenie pokaż pierwsze 3 indeksy [2019-01-01, 2019-01-02, 2019-01-03].
df.plot()często wyświetla znak, minor_locatorwięc możesz spróbować ax1.xaxis.set_minor_locator(plt.MaxNLocator(3)). Pamiętaj również, aby zastąpić 3liczbę ticków, które chcesz wyświetlić. W przypadku serii pand polecam import matplotlib.dates as mdatesi biegam ax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))zax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
Istnieje set_ticks()funkcja dla obiektów osi.
get_xticks()lub get_yticks()najpierw dla obiektu axes, edytować w razie potrzeby, a następnie przekazać listę z powrotem do set_ticks().
set_ticks(), ale mam set_xticks()i set_yticks(). Są to atrybuty obiektów osi, a nie osi. Może to się zmieniło w ciągu ostatnich kilku lat.
na wypadek, gdyby ktoś nadal tego potrzebował, a ponieważ nic tutaj naprawdę nie działało dla mnie, wymyśliłem bardzo prosty sposób, który zachowuje wygląd wygenerowanego wykresu „tak jak jest”, jednocześnie ustalając liczbę taktów na dokładnie N:
import numpy as np
import matplotlib.pyplot as plt
f, ax = plt.subplots()
ax.plot(range(100))
ymin, ymax = ax.get_ylim()
ax.set_yticks(np.round(np.linspace(ymin, ymax, N), 2))
ax.set_yticks(np.linspace(int(ymin), int(ymax), N), 2)
Rozwiązanie podane przez @raphael jest proste i całkiem pomocne.
Mimo to wyświetlane etykiety znaczników nie będą wartościami próbkowanymi z pierwotnej dystrybucji, ale z indeksów tablicy zwróconej przez np.linspace(ymin, ymax, N).
Aby wyświetlić N wartości w równych odstępach od oryginalnych etykiet znaczników, użyj tej set_yticklabels()metody. Oto fragment osi y z etykietami liczb całkowitych:
import numpy as np
import matplotlib.pyplot as plt
ax = plt.gca()
ymin, ymax = ax.get_ylim()
custom_ticks = np.linspace(ymin, ymax, N, dtype=int)
ax.set_yticks(custom_ticks)
ax.set_yticklabels(custom_ticks)
Gdy używana jest skala logarytmiczna, liczbę głównych taktów można ustalić za pomocą następującego polecenia
import matplotlib.pyplot as plt
....
plt.locator_params(numticks=12)
plt.show()
Wartość ustawiona na numticksokreśla liczbę taktów osi, które mają być wyświetlane.
Podziękowania dla posta @ bgamari za wprowadzenie locator_params()funkcji, ale nticksparametr generuje błąd, gdy używana jest skala dziennika.
pyplot.locator_params(axis = 'x', nbins = 4)(lubaxis = 'y') uczyniła proces naprawdę prostym. Dzięki @bgamari!