Masquer les valeurs des axes mais conserver les étiquettes de graduation des axes dans matplotlib

101

J'ai cette image:

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

entrez la description de l'image ici

Je veux cacher les chiffres; si j'utilise:

plt.axis('off')

... j'obtiens cette image:

entrez la description de l'image ici

Il masque également les étiquettes Vet t. Comment puis-je conserver les étiquettes tout en masquant les valeurs?

Luis Ramon Ramirez Rodriguez
la source

Réponses:

141

Si vous utilisez l' approche orientée objet matplotlib , il s'agit d'une tâche simple en utilisant ax.set_xticklabels()et 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
la source
11
Fonctionne très bien pour supprimer les étiquettes de graduation, mais vous obtenez toujours les marques de graduation ...
Andrew Schreiber
86

Sans a subplots, vous pouvez supprimer universellement les tiques comme ceci:

plt.xticks([])
plt.yticks([])
Noel Evans
la source
44

Cela fonctionne très bien. Collez simplement ceci avant plt.show():

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

Boom.

MRT
la source
2
Merci, cela fonctionne très bien. Dans les autres cas, les graduations sont conservées (car la direction des graduations est désactivée par défaut)
user140259
Contrairement aux réponses comme ax.set_xticklabels ([]), celle-ci fonctionne parfaitement pour le cas suivant: on utilise des sous-graphiques avec l'option sharex et veut supprimer les graduations uniquement pour l'un des sous-graphiques.
Михаил Лисаков
Génial! Et plt.gca (). Axes.get_xaxis (). Set_visible (False) pour supprimer également les étiquettes et les graduations de l'axe des x.
fbparis
1
ou si vous avez déjà l'objet hache,ax.xaxis.set_visible(False)
spinup
1
@filip Je suis content que cela ait aidé :)
MRT
3

Je ne suis pas sûr que ce soit le meilleur moyen, mais vous pouvez certainement remplacer les étiquettes de graduation comme ceci:

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

Dans Python 3.4, cela génère un tracé linéaire simple sans étiquette de graduation sur l'axe des x. Un exemple simple est ici: http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html

Cette question connexe a également de meilleures suggestions: Masquer le texte de l'axe dans les tracés matplotlib

Je suis nouveau sur python. Votre kilométrage peut varier dans les versions antérieures. Peut-être que d'autres peuvent vous aider?

Joe Gavin
la source
2

pour supprimer entièrement les coches, utilisez:

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

sinon ax.set_yticklabels([])et ax.set_xticklabels([])gardera les coches.

Ruslan S.
la source
Quand j'essaye ax.set_yticks([], []), j'obtiens l'avertissement suivant: "MatplotlibDeprecationWarning: Passer le paramètre mineur de set_xticks () positionnellement est déconseillé depuis Matplotlib 3.2; le paramètre deviendra mot-clé seulement deux versions mineures plus tard." Quelle est la bonne alternative?
Rylan Schaeffer le
@RylanSchaeffer, dans votre exemple, ax.set_yticks([], [])vous passez 2 listes vides qui provoquent une erreur. Pourquoi faire ça? Voir le manuel de commande. Si le premier argument ne doit pas être passé positionnelle, passer avec mot - clé: ax.set_yticks(ticks=[]).
Ruslan S.
0

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

entrez la description de l'image ici

Nic Scozzaro
la source