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.
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)
_
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)
Il existe une fonction set_ticks()
pour les objets d'axe.
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
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))
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)
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.