уменьшение количества сюжетных тиков - PullRequest
127 голосов
/ 13 июля 2011

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

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

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

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

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

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

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

Ответы [ 7 ]

232 голосов
/ 16 ноября 2012

В качестве альтернативы, если вы хотите просто установить количество тиков, одновременно позволяя 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)
23 голосов
/ 08 апреля 2018

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

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)
20 голосов
/ 13 июля 2011

Существует функция set_ticks() для осевых объектов.

4 голосов
/ 28 мая 2018

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

Чтобы решить проблему настройки и внешнего вида тиков, см. Руководство Tick Locators на сайте matplotlib

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

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

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

1 голос
/ 03 июля 2019

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

Тем не менее, отображаемые метки тиков будут не значениями, взятыми из исходного распределения, а из индексов массива, возвращенного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)
1 голос
/ 29 июня 2017

Когда используется логарифмическая шкала, число основных тиков можно исправить с помощью следующей команды

import matplotlib.pyplot as plt

....

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...