Ответы:
В качестве альтернативы, если вы хотите просто установить количество тиков, позволяя 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)
numticks
вместоnbins
numticks
решение для логарифмических графиков, как указано @meduz?
[0, 1, ..., 99]
а теперь они установлены nticks=10
, то новые разреженные метки будут размещены в десять раз дальше друг от друга вдоль оси, то есть теперь 1
будут располагаться там 9
, 2
где 19
были , где были ... и 9
где 99
были.
Если кто-то все еще получает эту страницу в результатах поиска:
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)
Для того, чтобы решить вопрос о настройке и появления тиков см Tick Локаторы руководство на сайте Matplotlib
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
Устанавливает общее количество тиков на оси х на 3 и равномерно распределяет его по оси.
Есть также хороший учебник об этом
ax = df.plot()
pandas.DataFrame
) с индексом datetime [2019-01-01, ... 2019-11-01], вызовите ax = df.plot()
, верните объект рисунка. звонить ax.xaxis.set_major_locator(plt.MaxNLocator(3))
только показать первые 3 индекс [2019-01-01, 2019-01-02, 2019-01-03].
df.plot()
часто отображает minor_locator
, так что вы можете попробовать ax1.xaxis.set_minor_locator(plt.MaxNLocator(3))
. Также не забудьте заменить 3
количество тиков, которое вы хотите отобразить. Для import matplotlib.dates as mdates
ax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
Есть set_ticks()
функция для осевых объектов.
get_xticks()
или get_yticks()
сначала для объекта оси, отредактировать по мере необходимости, а затем передать список обратно set_ticks()
.
set_ticks()
, но у меня есть set_xticks()
и set_yticks()
. Это атрибуты объектов осей, а не осей. Может быть, это изменилось за последние пару лет.
на тот случай, если кому-то это все еще нужно, и, поскольку здесь у меня ничего не получалось, я придумал очень простой способ, который сохраняет вид сгенерированного графика «как есть», фиксируя число тиков точно равным 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)
Решение, которое дал @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)
Когда используется логарифмическая шкала, число основных тиков можно исправить с помощью следующей команды
import matplotlib.pyplot as plt
....
plt.locator_params(numticks=12)
plt.show()
Значение, установленное для, numticks
определяет количество отображаемых тиков оси.
Кредиты на пост @ bgamari для введения locator_params()
функции, но nticks
параметр выдает ошибку при использовании масштаба журнала.
pyplot.locator_params(axis = 'x', nbins = 4)
(илиaxis = 'y'
) сделать процесс действительно простым. Спасибо @bgamari!