web-dev-qa-db-fra.com

réduction du nombre de ticks de parcelle

J'ai trop de ticks sur mon graphique et ils se rencontrent.

Comment puis-je réduire le nombre de ticks?

Par exemple, j'ai des tiques:

1E-6, 1E-5, 1E-4, ... 1E6, 1E7

Et je veux seulement:

1E-5, 1E-3, ... 1E5, 1E7

J'ai essayé de jouer avec la LogLocator, mais je n'ai pas été en mesure de le comprendre.

130
jlconlin

Alternativement, si vous voulez simplement définir le nombre de ticks tout en permettant à matplotlib de les positionner (actuellement uniquement avec MaxNLocator), il existe pyplot.locator_params ,

_pyplot.locator_params(nbins=4)
_

Vous pouvez spécifier un axe spécifique dans cette méthode, comme indiqué ci-dessous. Par défaut, les deux paramètres sont les suivants:

_# To specify the number of ticks on both or any single axes
pyplot.locator_params(axis='y', nbins=6)
pyplot.locator_params(axis='x', nbins=10)
_
235
bgamari

Si quelqu'un obtient toujours cette page dans les résultats de recherche:

fig, ax = plt.subplots()

plt.plot(...)

every_nth = 4
for n, label in enumerate(ax.xaxis.get_ticklabels()):
    if n % every_nth != 0:
        label.set_visible(False)
24

Il existe une fonction set_ticks() pour les objets d'axe.

20
André Caron

Pour résoudre le problème de personnalisation et d’apparence des ticks, consultez le guide localisateurs de ticks sur le site Web de matplotlib.

ax.xaxis.set_major_locator(plt.MaxNLocator(3))

Définirait le nombre total de ticks sur l’axe des x sur 3 et le répartirait également sur l’axe.

Il y a aussi un joli tutoriel à ce sujet

8

au cas où quelqu'un en aurait encore besoin, et comme rien ici ne fonctionnait vraiment pour moi, j'ai trouvé un moyen très simple de conserver l'apparence du tracé généré "tel quel" tout en fixant le nombre de ticks à exactement N:

import numpy as np
import matplotlib.pyplot as plt

f, ax = plt.subplots()
ax.plot(range(100))

ymin, ymax = ax.get_ylim()
ax.set_yticks(np.round(np.linspace(ymin, ymax, N), 2))
5
raphael

La solution que @raphael a donnée est simple et très utile.

Néanmoins, les étiquettes de ticks affichées ne seront pas des valeurs échantillonnées de la distribution originale mais du index du tableau renvoyé par np.linspace(ymin, ymax, N).

Pour afficher N valeurs uniformément espacées des étiquettes de ticks d'origine, utilisez la méthode set_yticklabels(). Voici un extrait pour l'axe des y, avec des étiquettes entières:

import numpy as np
import matplotlib.pyplot as plt

ax = plt.gca()

ymin, ymax = ax.get_ylim()
custom_ticks = np.linspace(ymin, ymax, N, dtype=int)
ax.set_yticks(custom_ticks)
ax.set_yticklabels(custom_ticks)
1
Tantris

Lorsqu'une échelle de journal est utilisée, le nombre de graduations principales peut être corrigé à l'aide de la commande suivante

import matplotlib.pyplot as plt

....

plt.locator_params(numticks=12)
plt.show()

La valeur définie sur numticks détermine le nombre de ticks d'axe à afficher.

Crédits au message de @ bgamari pour l'introduction de la fonction locator_params(), mais le paramètre nticks renvoie une erreur lorsqu'une échelle de journal est utilisée.

1
Ébe Isaac