Remover xticks em um gráfico matplotlib?

290

Eu tenho um gráfico semilogx e gostaria de remover os xticks. Eu tentei:

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

A grade desaparece (ok), mas permanecem pequenos ticks (no local dos ticks principais). Como removê-los?

Vincent
fonte
Algumas das soluções não funcionaram para mim. Mas apenas uma pequena mudança dos exemplos aqui: ax.set_xticks([], [])e está resolvido ...
TravelTrader

Respostas:

464

O tick_paramsmétodo é muito útil para coisas assim. Esse código desativa os marcadores principais e secundários e remove os rótulos do eixo 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()

insira a descrição da imagem aqui

John Vinyard
fonte
87
Aprecio como isso não apenas responde à pergunta, mas fornece um modelo para ativar / desativar várias coisas. Isso aplica o resultado aos eixos xey:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Steven C. Howell
2
E se for um gráfico 3D?
tommy.carstensen 02/09/2015
38
Esta é uma ótima resposta. Para quem procura a versão oo, axestem o mesmo tick_paramsmétodo.
Mad Físico
22
Nas versões mais recentes do matplotlib, você deve substituir 'on'por Truee 'off'com False.
usar o seguinte
1
A resposta deve ser atualizada para a interface OOP e a sintaxe da versão mais recente.
precisa saber é o seguinte
141

Não é exatamente o que o OP estava pedindo, mas uma maneira simples de desativar todas as linhas, marcações e rótulos dos eixos é simplesmente chamar:

plt.axis('off')
Martin Spacek
fonte
25
O que eu precisava, obrigado. A versão orientada a objeto estaria ax.axis('off')em uma instância de eixos existente.
precisa saber é o seguinte
5
como por apenas xaxis?
qrtLs
82

Como alternativa, você pode passar uma posição de tiquetaque vazia e rotular como

# 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
fonte
8
Se você tem uma instância de eixo existente, por exemplo, axvocê pode usar:ax.set_xticks([], [])
Guilherme Salomé
@ GuilhermeSalomé isso agora gera um aviso: "Passar o parâmetro menor de set_xticks () posicionalmente está obsoleto desde o Matplotlib 3.2; o parâmetro se tornará apenas palavras-chave duas versões menores posteriormente." Qual é a solução correta agora?
Rylan Schaeffer 23/04
2
@RylanSchaeffer ax.set_xticks([])para ticks importantes, ax.set_xticks([], minor=True)para ticks menores. Equivalentes com pyplotsão plt.xticks([])e plt.xticks([], minor=True).
Anakhand
68

Aqui está uma solução alternativa que encontrei na lista de discussão matplotlib :

import matplotlib.pylab as plt

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

gráfico

Tom Phillips
fonte
42

Existe uma solução melhor e mais simples do que a fornecida por John Vinyard. Use NullLocator:

import matplotlib.pyplot as plt

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

Espero que ajude.

dmcdougall
fonte
22
"Melhor" é discutível, mas +1 na alternativa.
Mechanical_meat
Uma variante dessa solução também funcionou para mim quando o objetivo era apenas remover xticks de uma inserção "ampliada", mantendo-os na plotagem principal. Usando axins.xaxis.set_major_locator(plt.NullLocator()), onde axinsé o objeto retornado por axins = zoomed_inset_axes()(função importada de mpl_toolkits.axes_grid1.inset_locator).
Dennis Soemers
28

Tente isso para remover os rótulos (mas não os carrapatos):

import matplotlib.pyplot as plt

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

exemplo

auraham
fonte
3
setpestá no modo Pylab, não pode ser utilizado contra os eixos individuais
dashesy
1
E a interface orientada a objetos?
precisa saber é o seguinte
Esta foi a única resposta que também funcionou para gráficos 3D para mim. Obrigado por isso!
Brent
13

Esse trecho pode ajudar a remover apenas os xticks.

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

Esse trecho pode ajudar na remoção dos xticks e yticks de ambos.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])
Amitrajit Bose
fonte
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')
Nishant Wattamwar
fonte
2
A versão orientada a objeto disso éax.tick_params()
Marcelo Villa-Piñeros
1
Além disso, usar offe onestá obsoleto. MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
Marcelo Villa-Piñeros
0

Aqueles que procuram um comando curto para desligar todos os ticks e rótulos devem concordar com

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

que permite digitar os boolrespectivos parâmetros desde a versão matplotlib> = 2.1.1

Para configurações personalizadas de tick, os documentos são úteis:

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

hahnec
fonte