Oculte os valores dos eixos, mas mantenha os rótulos das marcações dos eixos em matplotlib

101

Eu tenho esta imagem:

plt.plot(sim_1['t'],sim_1['V'],'k')
plt.ylabel('V')
plt.xlabel('t')
plt.show()

insira a descrição da imagem aqui

Eu quero esconder os números; se eu usar:

plt.axis('off')

... eu entendo esta imagem:

insira a descrição da imagem aqui

Também oculta os rótulos Ve t. Como posso manter os rótulos enquanto oculto os valores?

Luis Ramon Ramirez Rodriguez
fonte

Respostas:

137

Se você usar a abordagem orientada a objetos matplotlib , esta é uma tarefa simples usando ax.set_xticklabels()e ax.set_yticklabels():

import matplotlib.pyplot as plt

# Create Figure and Axes instances
fig,ax = plt.subplots(1)

# Make your plot, set your axes labels
ax.plot(sim_1['t'],sim_1['V'],'k')
ax.set_ylabel('V')
ax.set_xlabel('t')

# Turn off tick labels
ax.set_yticklabels([])
ax.set_xticklabels([])

plt.show()
tmdavison
fonte
11
Funciona muito bem para remover rótulos de carrapatos, mas você ainda obtém as marcas de carrapato ...
Andrew Schreiber
85

Sem um subplots, você pode remover universalmente os carrapatos como este:

plt.xticks([])
plt.yticks([])
Noel Evans
fonte
44

Isso funciona muito bem. Basta colar antes plt.show():

plt.gca().axes.get_yaxis().set_visible(False)

Estrondo.

MRT
fonte
2
Obrigado, isso funciona muito bem. Nos outros casos, os tiques são preservados (porque a direção dos tiques está
desativada
Ao contrário de respostas como ax.set_xticklabels ([]), esta funciona perfeitamente para o seguinte caso: usa-se subtramas com a opção sharex e deseja-se deletar tiques apenas para uma das subparcelas.
Михаил Лисаков
Ótimo! E plt.gca (). Axes.get_xaxis (). Set_visible (False) para também se livrar dos rótulos e marcações do eixo x.
fbparis
1
ou se você já tem o objeto de machado,ax.xaxis.set_visible(False)
spinup
1
@filip Fico feliz que tenha ajudado :)
MRT
3

Não tenho certeza se essa é a melhor maneira, mas você certamente pode substituir os rótulos de carrapato assim:

import matplotlib.pyplot as plt
x = range(10)
y = range(10)
plt.plot(x,y)
plt.xticks(x," ")
plt.show()

No Python 3.4, isso gera um gráfico de linha simples, sem rótulos de escala no eixo x. Um exemplo simples está aqui: http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html

Esta questão relacionada também tem algumas sugestões melhores: Ocultar o texto do eixo em gráficos matplotlib

Eu sou novo em python. Sua milhagem pode variar nas versões anteriores. Talvez outros possam ajudar?

Joe Gavin
fonte
2

para remover completamente as marcas, use:

ax.set_yticks([])
ax.set_xticks([])

caso contrário ax.set_yticklabels([])e ax.set_xticklabels([])manterá marcas de seleção.

Ruslan S.
fonte
Quando tento ax.set_yticks([], []), recebo o seguinte aviso: "MatplotlibDeprecationWarning: Passar o parâmetro secundário de set_xticks () posicionalmente está obsoleto desde o Matplotlib 3.2; o parâmetro se tornará palavra-chave apenas duas versões secundárias depois." Qual é a alternativa certa?
Rylan Schaeffer
@RylanSchaeffer, em seu exemplo ax.set_yticks([], [])você está passando 2 listas vazias que causam erro. Por que fazer isso? Veja o manual de comando. Se o primeiro argumento não deve ser passado posicionalmente, passá-lo com palavra-chave: ax.set_yticks(ticks=[]).
Ruslan S.
0

plt.gca().axes.yaxis.set_ticklabels([])

insira a descrição da imagem aqui

Nic Scozzaro
fonte