уменьшение количества сюжетных тиков
У меня слишком много тиков на графике, и они сталкиваются друг с другом.
Как я могу уменьшить количество тиков?
Например, у меня есть галочки:
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)