Comment faire pour modifier l'espacement entre les tiques dans matplotlib?
Je veux tracer un graphique avec beaucoup de tiques sur l'axe des X en utilisant le code suivant:
import pylab
N = 100
data = pylab.np.linspace(0, N, N)
pylab.plot(data)
pylab.xticks(range(N)) # add loads of ticks
pylab.grid()
pylab.tight_layout()
pylab.show()
pylab.close()
L'résultant de l'intrigue ressemble à ceci:
Comme vous pouvez le voir, l'axe X est un gâchis parce que les étiquettes de graduation sont tracées, avec trop peu d'espace entre eux ou même chevauchement.
Je voudrais créer constante de l'espace entre chaque tick label automatiquement, peu importe le nombre de tiques. Donc, j'aimerais augmenter l'espace entre les tiques, ce qui augmente potentiellement la "longueur" d'un complot.
Noter que les étiquettes de graduation peut être chaînes de caractères de longueur variable.
Ce que j'ai trouvé pour l'instant est tout au sujet de l'espacement entre l'axe et les étiquettes (ce qui n'est pas ce que je veux), tique de la fréquence (qui je peux déjà le faire) et de cochez les paramètres (qui ne semblent pas avoir toutes les options d'espacement).
Je peux changer la taille d'une figure manuellement avec matplotlib.pyplot.figure(figsize=(a, b))
, mais qui nécessiterait la connaissance de la valeur par défaut de l'espacement entre les tiques (il n'y a rien, autant que je puis dire) et la plus grande largeur (en pouces) d'une étiquette de graduation, je n'en ai pas la moindre idée de comment mesurer, donc ce n'est pas une option, à mon avis.
Que puis-je faire pour augmenter l'espacement entre les tiques? Je suis OK avec l'obtention d'une très longue durée de l'image.
Je parle dans le dernier paragraphe, et cela semble effectivement très dur à faire, étant donné que je ne sais pas comment calculer l'espace la plus longue de la marque... j'espère qu'il y a quelques tour de nice à le faire.
Oui, c'est mon point de vue. Donc apparenty vous exclure la seule solution possible. Aimeriez-vous aller dans cette voie ou pas? Je suppose que vous pouvez demander de l'aide le long de cette ligne, au lieu de l'exclusion de l'option.
OriginalL'auteur ForceBru | 2017-07-01
Vous devez vous connecter pour publier un commentaire.
L'espacement entre les ticklabels est exclusivement déterminé par l'espace entre les tiques sur les axes. Par conséquent, la seule façon d'obtenir plus d'espace entre ticklabels est de rendre les axes de plus grande.
Afin de déterminer l'espace nécessaire pour les étiquettes de ne pas se chevauchent, on peut trouver le plus grand label et de multiplier sa longueur par le nombre de ticklabels. On peut alors adapter la marge autour des axes et de définir la taille calculée comme une nouvelle figure de la taille.
Notez que si la valeur indiquée dans la fenêtre de tracé est plus grande que l'écran, il sera rétrécie à nouveau, de sorte que le redimensionnement de la figure n'apparaît que dans sa nouvelle taille lors de l'enregistrement. Ou, on peut choisir de l'intégrer dans certains fenêtre avec des barres de défilement, comme montré sur cette question: Barre de défilement sur Matplotlib montrant page
plt.gca().margins(x=0)
. Quelque chose peut être fait à ce sujet?margins(x=0)
est l'intérieur de la marge et n'a rien à voir avec la coupe des étiquettes à l'extérieur. Au lieu de cela, dans le code ci-dessus, j'ai choisim = 0.2 # inch margin
, donc si vous voulez plus d'espace autour de la axes, utilisez une valeur plus grande dem
.génial, maintenant tout fonctionne absolument parfaitement! Merci!
OriginalL'auteur ImportanceOfBeingErnest
Vous pouvez utiliser les éléments suivants pour faire pivoter les étiquettes et faire la police de caractères plus petits:
peut-être que si vous utilisez quelque chose comme:
ax.set_xticklabels(rotation = (45), fontsize = 10, va='bottom', ha='left')
pour faire pivoter les étiquettesC'est le même lien qu'il avait dans sa question déjà.
avez-vous lu la question et de visiter les liens que j'ai mis là? Le premier est un lien à cette question, ce qui est un problème différent.
je viens d'édité mon commment. Je pense que
ax.set_xticklabels
devrait faire l'affaireOriginalL'auteur makaros