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)
numticks
zamiastnbins
numticks
rozwią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 1
będą siedzieć tam 9
, 2
gdzie 19
było , gdzie było ... i 9
gdzie 99
był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_locator
więc możesz spróbować ax1.xaxis.set_minor_locator(plt.MaxNLocator(3))
. Pamiętaj również, aby zastąpić 3
liczbę ticków, które chcesz wyświetlić. W przypadku serii pand polecam import matplotlib.dates as mdates
i 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 numticks
określa liczbę taktów osi, które mają być wyświetlane.
Podziękowania dla posta @ bgamari za wprowadzenie locator_params()
funkcji, ale nticks
parametr 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!