уменьшение количества сюжетных тиков

У меня слишком много тиков на графике, и они сталкиваются друг с другом.

Как я могу уменьшить количество тиков?

Например, у меня есть галочки:

1E-6, 1E-5, 1E-4, ... 1E6, 1E7

И я хочу только:

1E-5, 1E-3, ... 1E5, 1E7

Я пытался играть с LogLocator, но я не смог понять это.

Ответ 1

Альтернативно, если вы хотите просто установить количество тиков, позволяя matplotlib позиционировать их (в настоящее время только с MaxNLocator), есть pyplot.locator_params,

pyplot.locator_params(nbins=4)

Вы можете указать конкретную ось в этом методе, как указано ниже, по умолчанию:

# 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)

Ответ 2

Если кто-то по-прежнему получает эту страницу в результатах поиска:

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)

Ответ 3

Здесь есть функция set_ticks() для объектов оси.

Ответ 4

в случае, если кто-то все еще нуждается в этом, и поскольку здесь ничего не работает, я придумал очень простой способ сохранить внешний вид сгенерированного сюжета "как есть", фиксируя количество тиков точно до 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))

Ответ 5

Для того, чтобы решить вопрос о настройке и появления тиков см Tick Локаторы руководство на сайте Matplotlib

ax.xaxis.set_major_locator(plt.MaxNLocator(3))

Устанавливает общее количество тиков на оси х на 3 и равномерно распределяет его по оси.

Есть также хороший учебник об этом

Ответ 6

При использовании шкалы журнала число основных тиков может быть исправлено с помощью следующей команды

import matplotlib.pyplot as plt

....

plt.locator_params(numticks=12)
plt.show()

Значение, установленное на numticks, определяет количество отображаемых тиков оси.

Кредиты на пост @bgamari для введения функции locator_params(), но параметр nticks генерирует ошибку при использовании шкалы журнала.

Ответ 7

Решение, которое дал @raphael, простое и довольно полезное.

Тем не менее, отображаемые метки np.linspace(ymin, ymax, N) будут не значениями, взятыми из исходного распределения, а из индексов массива, возвращаемых np.linspace(ymin, ymax, N).

Для отображения N значений, равномерно распределенных по отношению к исходным меткам, используйте метод set_yticklabels(). Вот фрагмент для оси Y с целочисленными метками:

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)