J'essaie de tracer une figure sans graduations ni chiffres sur l'un ou l'autre des axes (j'utilise les axes dans le sens traditionnel, pas dans la nomenclature matplotlib!). Un problème que j'ai rencontré est celui où matplotlib ajuste les ticklabels x (y) en soustrayant une valeur N, puis ajoute N à la fin de l'axe.
Cela peut être vague, mais l'exemple simplifié suivant met en évidence le problème, avec «6.18» comme valeur incriminée de N:
import matplotlib.pyplot as plt
import random
prefix = 6.18
rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')
frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
xlabel_i.set_visible(False)
xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
xlabel_i.set_fontsize(0.0)
xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
tick.set_visible(False)
plt.show()
Les trois choses que je voudrais savoir sont:
Comment désactiver ce comportement en premier lieu (bien que dans la plupart des cas il soit utile mais pas toujours!), J'ai parcouru matplotlib.axis.XAxis
et je ne trouve rien qui convienne
Comment puis-je faire disparaître N (c'est-à-dire X.set_visible(False)
)
Y at-il une meilleure façon de faire ce qui précède de toute façon? Mon intrigue finale serait 4x sous-parcelles dans une figure, si cela est pertinent.
Au lieu de masquer chaque élément, vous pouvez masquer l’axe entier:
frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)
Ou, vous pouvez définir les ticks sur une liste vide:
frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])
Dans cette deuxième option, vous pouvez toujours utiliser plt.xlabel()
et plt.ylabel()
pour ajouter des étiquettes aux axes.
Si vous souhaitez masquer uniquement le texte de l'axe en conservant les lignes de la grille:
frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])
Faire set_visible(False)
ou set_ticks([])
masquera également les lignes de la grille.
Si vous êtes comme moi et que vous ne récupérez pas toujours les axes, ax
, lors du traçage de la figure, une solution simple serait de le faire
plt.xticks([])
plt.yticks([])
Un peu d'un vieux fil mais, cela semble être une méthode plus rapide utilisant la dernière version de matplotlib:
définir le formateur principal pour l'axe des x
ax.xaxis.set_major_formatter(plt.NullFormatter())
Je n'ai pas été en mesure de restituer une image sans bordures ni données d'axes basée sur les extraits de code ici (même ceux acceptés dans la réponse). Après avoir fouillé dans la documentation de l’API, j’ai atterri sur ce code pour rendre mon image.
plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)
J'ai utilisé l'appel tick_params
pour fermer en gros toute information supplémentaire pouvant être restituée et j'ai un graphique parfait dans mon fichier de sortie.
Une astuce consiste à définir la couleur des étiquettes de coutil en blanc pour la masquer!
plt.xticks(color='w')
plt.yticks(color='w')
Lorsque vous utilisez l'API orientée objet, l'objet Axes
dispose de deux méthodes utiles pour supprimer le texte de l'axe, set_xticklabels()
et set_xticks()
.
Dites que vous créez un terrain en utilisant
fig, ax = plt.subplots(1)
ax.plot(x, y)
Si vous voulez simplement supprimer les étiquettes de tick, vous pouvez utiliser
ax.set_xticklabels([])
ou pour éliminer complètement les tiques, vous pouvez utiliser
ax.set_xticks([])
Ces méthodes sont utiles pour spécifier exactement où vous voulez que les ticks et comment vous voulez qu'ils soient étiquetés. Passer une liste vide ne donne aucun tick, ni aucun libellé, respectivement.
J'ai codé la couleur de cette figure pour faciliter le processus.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
Vous pouvez avoir un contrôle total sur la figure en utilisant ces commandes. Pour compléter la réponse, j'ai également ajouté le contrôle sur les splines:
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)
# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)