Far apparire le griglie verticali nel grafico a linee in matplotlib


93

Desidero ottenere sia le linee della griglia orizzontali che quelle verticali sul mio grafico, ma per impostazione predefinita vengono visualizzate solo le linee della griglia orizzontali. Sto usando una pandas.DataFramequery da una query SQL in Python per generare un grafico a linee con le date sull'asse x. Non sono sicuro del motivo per cui non compaiono nelle date e ho provato a cercare una risposta a questo ma non sono riuscito a trovarne una.

Tutto quello che ho usato per tracciare il grafico è il semplice codice qui sotto.

data.plot()
grid('on')

data è il DataFrame che contiene le date e i dati della query sql.

Ho anche provato ad aggiungere il codice qui sotto ma ottengo ancora lo stesso output senza linee di griglia verticali.

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

Eventuali suggerimenti?

inserisci qui la descrizione dell'immagine


data.plot(grid="on")ha funzionato per me
Markus

Risposte:


102

Potrebbe essere necessario fornire un argomento booleano nelle chiamate, ad esempio, usa ax.yaxis.grid(True)invece di ax.yaxis.grid(). Inoltre, poiché stai utilizzando entrambi, puoi combinarli ax.grid, il che funziona su entrambi, piuttosto che farlo una volta per ogni dimensione.

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

Questo dovrebbe risolverti.


L'ho provato ma per qualche motivo sembra ancora lo stesso di prima
Osmond Bishop

1
Stai facendo questo in interprete interattivo? Assicurati di impostare la griglia prima di chiamareplt.show()
wim

Sto usando iPython. Ho provato ad aggiungere plt.show () non farà la differenza.
Osmond Bishop

1
Ebbene questo è strano. Qual è la tua versione di ipython, prova anche a eseguirlo ipython --pylabe fallo plt.grid(True)immediatamente: vedi la griglia?
wim

Ho provato plt.grid(True)e ottenuto il grafico vuoto con entrambe le linee della griglia verticale e orizzontale, quindi sì, è strano perché non riesco a ottenere questo per il mio grafico a linee. Sto eseguendo l'ultima versione disponibile di iPython.
Osmond Bishop

57

plt.gca().xaxis.grid(True) ha dimostrato di essere la soluzione per me


6
Il myaxes.grid(which='x')non funzionava per me con matplotlib versione 1.4.2 ... non poteva ottenere la whichparola chiave per lavoro a tutti. Tuttavia, ha myaxes.xaxis.grid(True)fatto il trucco ed è concettualmente migliore IMO. Oh, e non dimenticare il myaxes.set_axisbelow(True)metodo utile per mettere la griglia dietro i dati.
travc

25

Secondo la documentazione di matplotlib , la firma del metodo di Axesclasse grid()è la seguente:

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
Attiva o disattiva le griglie degli assi.

which può essere "major" (impostazione predefinita), "minor" o "both" per controllare se le griglie di tick principali, le griglie di tick minori o entrambe sono interessate.

axis può essere "entrambi" (predefinito), "x" o "y" per controllare quale gruppo di linee della griglia viene disegnato.

Quindi, per mostrare le linee della griglia sia per l'asse x che per l'asse y, possiamo usare il seguente codice:

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

Questo metodo ci offre un controllo più preciso su cosa mostrare per le linee della griglia.



3

Risposta breve (leggi sotto per maggiori informazioni):

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

inserisci qui la descrizione dell'immagine

Quello che fai è corretto e dovrebbe funzionare.

Tuttavia, poiché l' asse X nel tuo esempio è un asse DateTime, i segni di graduazione principali (molto probabilmente) vengono visualizzati solo su entrambe le estremità dell'asse X. Gli altri segni di graduazione visibili sono segni di graduazione minori .

Il ax.grid()metodo, per impostazione predefinita, disegna le linee della griglia sui segni di graduazione principali. Pertanto, nella trama non appare nulla.

Usa il codice sottostante per evidenziare i segni di graduazione. Le major saranno blu mentre le minori saranno rosse.

ax.tick_params(which='both', width=3)
ax.tick_params(which='major', length=20, color='b')
ax.tick_params(which='minor', length=10, color='r')

Ora per forzare la visualizzazione delle linee della griglia anche sui segni di graduazione Minori, passare il which='minor'al metodo:

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')

o semplicemente utilizzare which='both'per disegnare le linee della griglia sia maggiore che minore. E questa è una linea della griglia più elegante:

ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--')
ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')

1

Solo per linee orizzontali

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

Questo ha funzionato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.