Changer la “variation de fréquence sur l'axe x ou y dans matplotlib?
Je suis en train de fixer la façon dont python parcelles mes données.
Dire
x = [0,5,9,10,15]
et
y = [0,1,2,3,4]
Alors je voudrais faire:
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
et l'axe des x' tiques sont tracées à intervalles de 5. Est-il un moyen de faire apparaître des intervalles de 1?
- Si les tiques est le mot qui convient ici, de changer les tiques à l'étape de la taille sera certainement guide en plus de débutants à cette question.
- Étroitement liés à la question: stackoverflow.com/questions/6682784/... et une super solution:
pyplot.locator_params(nbins=4)
- nbins semble avoir été abandonné dans matplotlib2.x, malheureusement
Vous devez vous connecter pour publier un commentaire.
Vous pourriez définir explicitement l'endroit où vous souhaitez les graduations avec
plt.xticks
:Par exemple,
(
np.arange
a été utilisé plutôt que Pythonrange
fonction juste au cas oùmin(x)
etmax(x)
sont des flotteurs au lieu d'entiers.)La
plt.plot
(ouax.plot
) la fonction sera automatiquement réglée par défautx
ety
limites. Si vous souhaitez conserver ces limites, et il suffit de changer le pas de la coche marques, alors vous pouvez utiliserax.get_xlim()
de découvrir quelles sont les limites Matplotlib a déjà mis en.La valeur par défaut cochez formateur doit faire un travail décent de l'arrondi de la tique valeurs pour un bon nombre de chiffres significatifs. Cependant, si vous souhaitez avoir plus de contrôle sur le format, vous pouvez définir votre propre formateur. Par exemple,
Voici un exécutable exemple:
+1
dansplt.xticks(np.arange(min(x), max(x)+1, 1.0))
est nécessaire pour montrer la dernière marque de graduation.np.arange(start, stop)
génère des valeurs dans le demi-ouvert intervalle[start, stop)
, y comprisstart
mais à l'exclusion desstop
. J'ai donc utilisémax(x)+1
pour s'assurer quemax(x)
est inclus.plt.xticks(np.arange(min(dates), max(dates)+0.1,0.1)
? il semble seulement des parcelles de l'annéexticks
. Sinon, vous pouvez utiliser FuncFormatter pour convertir des flotteurs de la chaîne d'étiquettes. Ou si vous intriguedatetime.datetime
objets directement (au lieu de chars) alors vous pouvez utiliser DateFormatter pour formater les dates. Si cela n'aide pas ou si vous souhaitez plus de précisions, merci de poster une nouvelle question.TypeError: 'numpy.ndarray' object is not callable
...une idée ? -- Je suis sur matplotlib 2.2.3Une autre approche consiste à définir l'axe locator:
Il y a plusieurs différents types de repérage en fonction de vos besoins.
Voici un exemple complet:
matplotlib.dates.AutoDateLocator()
J'aime cette solution (à partir de la Matplotlib Tracé Livre De Recettes):
Cette solution vous donner le contrôle explicite de la tique espacement via le numéro attribué à
ticker.MultipleLocater()
, permet automatique de la limite de détermination, et il est facile à lire plus tard.Au cas où quelqu'un est intéressé par un général de one-liner, il suffit de récupérer les tiques et l'utiliser pour définir la nouvelle tiques par l'échantillonnage de tous les autres tiques.
ax.set_xticks([tick for tick in ax.get_xticks() if tick % 1 == 0])
C'est très orthodoxe, mais de loin le plus propre/plus facile de comprendre, par exemple que j'ai trouvé pour ce faire. C'est à partir d'une réponse sur DONC ici:
Façon la plus propre à masquer chaque nième tick label matplotlib barre de couleur?
Alors vous pouvez faire une boucle sur les étiquettes, à visible ou non selon la densité souhaitée.
edit: notez que, parfois, matplotlib ensembles de labels ==
''
, alors il pourrait ressembler à un label n'est pas présent, alors qu'en fait il est et n'est tout simplement pas afficher quoi que ce soit. Assurez-vous que vous êtes en parcourant réel visible étiquettes, vous pourriez essayer:ax.get_xticklabels()[1::2]
sont les étiquettes pour être caché.''
de sorte que lorsque vous mettez en boucle à travers eux, vous faites xticklabels qui sont vides invisible (ce qui n'aurait aucun effet sur la visualisation, mais peut signifier que vous n'êtes pas en tirant les étiquettes correctes). Vous pourriez essayer:vis_labels = [label for label in ax.get_xticklabels() if label.get_visible() is True]; plt.setp(vis_labels[::2], visible==False)
C'est un vieux sujet, mais je bute sur ce que chaque maintenant et puis et fait de cette fonction. C'est très pratique:
Une mise en garde de contrôler les tiques comme cela, c'est que l'on n'a pas plus profiter de la interactives automagic la mise à jour de l'échelle max après un ajout d'une ligne. Alors ne
et exécuter le resadjust à nouveau la fonction.
J'ai développé une solution peu élégante. Songez que nous avons de l'axe X, et aussi une liste d'étiquettes pour chaque point de X.
Exemple:
Disons que je veux montrer les tiques seulement les étiquettes pour 'fév' et 'jun'
Bon, maintenant, nous avons une liste de faux des étiquettes. Tout d'abord, nous avons tracé la version originale.
Maintenant, la version modifiée.
Cela a fonctionné pour moi
si vous voulez les tiques entre [1,5] (1 et 5 inclus), puis remplacer
xmarks = range(1, length+1, 1)
. assez sûr que la compréhension de liste est redondante.Ici est un pur python de mise en œuvre de la fonctionnalité désirée qui gère tout numérique de la série (int ou float) avec positifs, négatifs ou mitigés valeurs:
Exemple De Sortie:
Et D'Exemples D'Utilisation:
si vous voulez juste pour définir l'espacement simple liner avec un minimum de standard:
fonctionne aussi facilement pour les petites tiques:
un peu de mouthfull, mais assez compact