Masquage du texte de l'axe dans les tracés matplotlib
J'essaie de tracer une figure sans repères ou chiffres sur l'un ou l'autre des axes (j'utilise des axes au sens traditionnel, pas la nomenclature matplotlib!). Un problème que j'ai rencontré est 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' étant la 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 est utile, il est pas toujours!) J'ai regardé à travers
matplotlib.axis.XAxis
et ne trouve rien d'approprié Comment puis-je faire N disparaître (c'est à dire
X.set_visible(False)
)Y a-t-il une meilleure façon de faire ce qui précède de toute façon? Mon intrigue finale serait des sous-parcelles 4x4 dans une figure, si cela est pertinent.
5 réponses
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 tiques 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 pour les axes.
Si vous voulez masquer uniquement le texte de l'axe en gardant 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 ne récupérez pas toujours les axes, ax
, lors du tracé de la figure, alors une solution simple serait de faire
plt.xticks([])
plt.yticks([])
Un peu d'un vieux thread mais, cela semble être une méthode plus rapide en utilisant la dernière version de matplotlib:
Définit le formateur principal pour l'axe x
ax.xaxis.set_major_formatter(plt.NullFormatter())
Je n'étais pas réellement capable de rendre une image Sans bordures ou données d'axe basées sur l'un des extraits de code ici (même celui accepté à 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 fondamentalement toute information supplémentaire qui pourrait être rendue et j'ai un graphique parfait dans mon fichier de sortie :). Espérons que cette aide!