web-dev-qa-db-fra.com

Sous-parcelles de Matplotlib - Débarrassez-vous des étiquettes à cocher

Existe-t-il un moyen de se débarrasser complètement des étiquettes de tick lors de la création d'un tableau de sous-parcelles dans Matplotlib? Je dois actuellement spécifier chaque tracé en fonction de la ligne et de la colonne d'un ensemble de données plus grand auquel le tracé correspond. J'ai essayé d'utiliser le ax.set_xticks ([]) et la commande similaire de l'axe des y, en vain.

Je reconnais que c'est probablement une demande inhabituelle de vouloir faire un tracé sans aucune donnée d'axe, mais c'est ce dont j'ai besoin. Et j'en ai besoin pour appliquer automatiquement à toutes les sous-parcelles du tableau.

20
Palmetto_Girl86

Vous avez la bonne méthode. Vous n'appliquez peut-être pas le set_xticks aux bons axes.

Un exemple:

import matplotlib.pyplot as plt
import numpy as np

ncols = 5
nrows = 3

# create the plots
fig = plt.figure()
axes = [ fig.add_subplot(nrows, ncols, r * ncols + c) for r in range(0, nrows) for c in range(0, ncols) ]

# add some data
for ax in axes:
    ax.plot(np.random.random(10), np.random.random(10), '.')

# remove the x and y ticks
for ax in axes:
    ax.set_xticks([])
    ax.set_yticks([])

Cela donne:

enter image description here

Notez que chaque instance d'axe est stockée dans une liste (axes) et peut ensuite être facilement manipulée. Comme d'habitude, il existe plusieurs façons de procéder, ce n'est qu'un exemple.

20
DrV

Les commandes sont les mêmes pour les sous-tracés

In [1]: fig = plt.figure()

In [2]: ax1 = fig.add_subplot(211)

In [3]: ax2 = fig.add_subplot(212)

In [4]: ax1.plot([1,2])
Out[4]: [<matplotlib.lines.Line2D at 0x10ce9e410>]

In [5]: ax1.tick_params(
   ....:     axis='x',          # changes apply to the x-axis
   ....:     which='both',      # both major and minor ticks are affected
   ....:     bottom='off',      # ticks along the bottom Edge are off
   ....:     top='off',         # ticks along the top Edge are off
   ....:     labelbottom='off'  # labels along the bottom Edge are off)
   ....:)

In [6]: plt.draw()

enter image description here

11
Ben

Encore plus concis que la réponse de @DrV, remixant le commentaire de @ mwaskom, une ligne complète et totale pour se débarrasser de tous les axes dans toutes les sous-parcelles:

# do some plotting...
plt.subplot(121),plt.imshow(image1)
plt.subplot(122),plt.imshow(image2)
# ....

# one liner to remove *all axes in all subplots*
plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);
4
Roy Shilkrot