web-dev-qa-db-fra.com

Faire apparaître des lignes de grille verticales dans le tracé de ligne dans matplotlib

Je souhaite obtenir à la fois des lignes de grille horizontales et verticales sur mon tracé, mais seules les lignes de grille horizontales apparaissent par défaut. J'utilise un pandas.DataFrame d'une requête SQL dans python pour générer un tracé de lignes avec des dates sur l'axe des abscisses. Je ne sais pas pourquoi elles n'apparaissent pas aux dates et j'ai essayé de rechercher une réponse à cela, mais ne pouvait pas en trouver un.

Tout ce que j'ai utilisé pour tracer le graphique est le code simple ci-dessous.

data.plot()
grid('on')

data est le DataFrame qui contient les dates et les données de la requête SQL.

J'ai également essayé d'ajouter le code ci-dessous, mais j'obtiens toujours la même sortie sans lignes de grille verticales.

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines

Aucune suggestion?

enter image description here

77
Osmond Bishop

Vous devrez peut-être donner un argument booléen dans vos appels, par exemple. utilisez ax.yaxis.grid(True) au lieu de ax.yaxis.grid(). De plus, puisque vous utilisez les deux, vous pouvez les combiner en ax.grid, qui fonctionne sur les deux, plutôt que de le faire une fois pour chaque dimension.

ax = plt.gca()
ax.grid(True)

Cela devrait vous régler.

83
wim

plt.gca().xaxis.grid(True) s'est avéré être la solution pour moi

43
matt

Selon la documentation de matplotlib , La signature de la méthode Axes class grid() est la suivante:

Axes.grid (b = None, qui = 'majeur', axis = 'les deux', ** kwargs)
Activez ou désactivez les grilles d’axe.

which peut être ‘majeur’ (par défaut), ‘mineur’ ou ‘les deux’ pour contrôler si les grilles majeures de ticks, les grilles mineures de ticks ou les deux sont affectées.

axis peut être ‘les deux’ (par défaut), ‘x’ ou ‘y’ pour contrôler l’ensemble des lignes de la grille dessinées.

Ainsi, pour afficher les lignes de la grille des axes x et y, nous pouvons utiliser le code suivant:

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')

Cette méthode nous donne un contrôle plus précis sur ce qu'il faut afficher pour les lignes de la grille.

13
jdhao

peut-être que cela peut résoudre le problème: matplotlib, définit la taille d'une grille sur un tracé

ax.grid(True, which='both')

La vérité est que la grille fonctionne, mais il n'y a qu'une seule v-grille à 00:00 et aucune grille dans les autres. Je rencontre le même problème qu'il n'y a qu'une seule grille le 1er novembre sur plusieurs jours.

4
Lory_yang

Pour seulement des lignes horizontales

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines

Cela a fonctionné

0
Mudit