Удалить xticks в сюжете matplotlib?

290

У меня есть график полулогкса, и я хотел бы удалить пробелы. Я попытался:

plt.gca().set_xticks([])
plt.xticks([])
ax.set_xticks([])

Сетка исчезает (хорошо), но маленькие галочки (вместо основных галочек) остаются. Как их убрать?

Винсент
источник
Некоторые из решений не сработали для меня. Но только небольшое изменение примеров здесь: ax.set_xticks([], [])и это решено ...
TravelTrader

Ответы:

464

tick_paramsМетод очень полезен для вещей , как это. Этот код отключает основные и второстепенные тики и удаляет метки с оси X.

from matplotlib import pyplot as plt
plt.plot(range(10))
plt.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom=False,      # ticks along the bottom edge are off
    top=False,         # ticks along the top edge are off
    labelbottom=False) # labels along the bottom edge are off
plt.show()
plt.savefig('plot')
plt.clf()

введите описание изображения здесь

Джон Виньярд
источник
87
Я ценю, что это не только отвечает на вопрос, но и предоставляет шаблон для включения / выключения нескольких вещей. Это относится к результату как по осям x, так и по оси y:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Стивен К. Хауэлл,
2
Что если это 3D-сюжет?
tommy.carstensen
38
Это отличный ответ. Для тех, кто ищет oo версию, axesесть такой же tick_paramsметод.
Безумный физик
22
В более новых версиях matplotlib, вы должны заменить 'on'с Trueи 'off'с False.
BallpointBen
1
Ответ должен быть обновлен для интерфейса ООП и синтаксиса новой версии.
ifly6
143

Не совсем то, что запрашивал OP, но простой способ отключить все линии осей, галочки и метки - это просто вызвать:

plt.axis('off')
Мартин Спейсек
источник
26
За что мне нужно спасибо. Объектно-ориентированная версия будет ax.axis('off')на существующем экземпляре осей.
PlasmaBinturong
5
как только для xaxis?
qrtLs
83

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

# for matplotlib.pyplot
# ---------------------
plt.xticks([], [])
# for axis object
# ---------------
# from Anakhand May 5 at 13:08
# for major ticks
ax.set_xticks([])
# for minor ticks
ax.set_xticks([], minor=True)
hashmuke
источник
8
Скажем ax, если у вас есть существующий экземпляр оси, вы можете использовать:ax.set_xticks([], [])
Guilherme Salomé
@ GuilhermeSalomé, теперь это вызывает предупреждение: «Передача младшего параметра set_xticks () позиционно устарела, начиная с Matplotlib 3.2; параметр станет только для ключевых слов двумя второстепенными выпусками позже». Какое правильное решение сейчас?
Рилан Шеффер
2
@RylanSchaeffer ax.set_xticks([])для крупных тиков, ax.set_xticks([], minor=True)для небольших тиков. Эквиваленты с pyplotявляются plt.xticks([])и plt.xticks([], minor=True).
Анакханд
68

Вот альтернативное решение, которое я нашел в списке рассылки matplotlib :

import matplotlib.pylab as plt

x = range(1000)
ax = plt.axes()
ax.semilogx(x, x)
ax.xaxis.set_ticks_position('none') 

график

Том Филлипс
источник
42

Существует лучшее и более простое решение, чем решение, данное Джоном Виньярдом. Используйте NullLocator:

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.show()
plt.savefig('plot')

Надеюсь, это поможет.

dmcdougall
источник
22
«Лучше» является дискуссионным, но +1 для альтернативы.
mechanical_meat
Вариант этого решения также работал для меня, когда цель состояла в том, чтобы удалить только метки из «увеличенной» вставки, сохраняя их в основном сюжете. Используя axins.xaxis.set_major_locator(plt.NullLocator()), где axinsобъект возвращается axins = zoomed_inset_axes()(функция, импортированная из mpl_toolkits.axes_grid1.inset_locator).
Деннис Соемерс
28

Попробуйте удалить ярлыки (но не галочки):

import matplotlib.pyplot as plt

plt.setp( ax.get_xticklabels(), visible=False)

пример

auraham
источник
3
setpнаходится в режиме pylab, не может использоваться против отдельных осей
dashesy
1
Как насчет объектно-ориентированного интерфейса?
ifly6
Это был единственный ответ, который также работал на 3D-графики для меня. Спасибо за это!
Брент
13

Этот фрагмент может помочь только в удалении ссылок.

from matplotlib import pyplot as plt    
plt.xticks([])

Этот фрагмент может помочь в удалении как xticks, так и yticks.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])
Амитраджит Бозе
источник
3
# remove all the ticks (both axes), and tick labels on the Y axis
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')
Нишант Ваттамвар
источник
2
ax.tick_params()
Объектно-
1
Кроме того, использование offи onне рекомендуется. MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
Марсело Вилла-Пиньерос,
0

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

plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False)

который позволяет тип boolдля соответствующих параметров, так как версия matplotlib> = 2.1.1

Для пользовательских настроек галочки полезны документы:

https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.tick_params.html

hahnec
источник