Mam zbyt wiele tików na moim wykresie i zderzają się one ze sobą.
Jak mogę zmniejszyć liczbę kleszczy?
Na przykład mam kleszcze:
1E-6, 1E-5, 1E-4, ... 1E6, 1E7
Chcę tylko:
1E-5, 1E-3, ... 1E5, 1E7
Próbowałem bawić się z LogLocator
, ale nie byłem w stanie tego rozgryźć.
python
matplotlib
jlconlin
źródło
źródło
pyplot.locator_params(axis = 'x', nbins = 4)
(lubaxis = 'y'
) uczyniła proces naprawdę prostym. Dzięki @bgamari!numticks
zamiastnbins
numticks
rozwiązanie dla wykresów logarytmicznych, jak wskazał @meduz?[0, 1, ..., 99]
a teraz jeden zestawnticks=10
, to nowe rzadkie etykiety zostaną umieszczone dziesięć razy dalej od siebie wzdłuż osi, tj. Teraz1
będą siedzieć tam9
,2
gdzie19
było , gdzie było ... i9
gdzie99
było.Jeśli ktoś nadal wyświetla tę stronę w wynikach wyszukiwania:
źródło
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
źródło
ax = df.plot()
pandas.DataFrame
) z indeksem datetime [2019-01-01, ... 2019-11-01], callax = 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 polecamimport matplotlib.dates as mdates
i biegamax.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.źródło
get_xticks()
lubget_yticks()
najpierw dla obiektu axes, edytować w razie potrzeby, a następnie przekazać listę z powrotem doset_ticks()
.set_ticks()
, ale mamset_xticks()
iset_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:
źródło
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:źródło
Gdy używana jest skala logarytmiczna, liczbę głównych taktów można ustalić za pomocą następującego polecenia
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, alenticks
parametr generuje błąd, gdy używana jest skala dziennika.źródło