Vertikale Gitterlinien werden im Liniendiagramm in matplotlib angezeigt

93

Ich möchte sowohl horizontale als auch vertikale Gitterlinien in meinem Diagramm erhalten, aber standardmäßig werden nur die horizontalen Gitterlinien angezeigt. Ich verwende eine pandas.DataFrameSQL-Abfrage in Python, um ein Liniendiagramm mit Datumsangaben auf der x-Achse zu generieren. Ich bin mir nicht sicher, warum sie nicht an den Daten erscheinen, und ich habe versucht, nach einer Antwort darauf zu suchen, konnte aber keine finden.

Alles, was ich zum Zeichnen des Diagramms verwendet habe, ist der einfache Code unten.

data.plot()
grid('on')

data ist der DataFrame, der die Daten und Daten aus der SQL-Abfrage enthält.

Ich habe auch versucht, den folgenden Code hinzuzufügen, aber ich erhalte immer noch die gleiche Ausgabe ohne vertikale Gitterlinien.

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

Irgendwelche Vorschläge?

Geben Sie hier die Bildbeschreibung ein

Osmond Bishop
quelle
data.plot(grid="on")arbeitete für mich
Markus

Antworten:

101

Möglicherweise müssen Sie in Ihren Aufrufen ein boolesches Argument angeben, z . B. ax.yaxis.grid(True)anstelle von ax.yaxis.grid(). Da Sie beide verwenden, können Sie sie auch kombinieren ax.grid, was für beide funktioniert, anstatt es für jede Dimension einmal zu tun.

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

Das sollte dich klären.

wim
quelle
Ich habe es versucht, aber aus irgendeinem Grund sieht es immer noch genauso aus wie zuvor
Osmond Bishop
1
Tun Sie dies in einem interaktiven Dolmetscher? Stellen Sie sicher, dass Sie das Raster einstellen, bevor Sie anrufenplt.show()
wim
Ich benutze iPython. Ich habe versucht, plt.show () hinzuzufügen, es wird keinen Unterschied machen.
Osmond Bishop
1
Nun, das ist seltsam. Wie sieht Ihre Ipython-Version aus ? Versuchen Sie auch, sie auszuführen ipython --pylab, und plt.grid(True)tun Sie dies sofort - sehen Sie das Raster?
wim
Ich habe versucht, plt.grid(True)das leere Diagramm mit den vertikalen und horizontalen Gitterlinien zu erhalten. Ja, es ist seltsam, warum ich dies für mein Liniendiagramm nicht erhalten kann. Ich verwende die neueste verfügbare Version von iPython.
Osmond Bishop
57

plt.gca().xaxis.grid(True) erwies sich als die Lösung für mich

matt
quelle
6
Das hat myaxes.grid(which='x')bei mir mit matplotlib Version 1.4.2 nicht funktioniert ... konnte das whichSchlüsselwort überhaupt nicht zum Laufen bringen . Hat myaxes.xaxis.grid(True)aber den Trick gemacht und ist konzeptionell besser IMO. Oh, und vergessen Sie nicht die nützliche myaxes.set_axisbelow(True)Methode, um das Raster hinter die Daten zu setzen.
Reise
25

Gemäß der matplotlib-Dokumentation lautet die Signatur der AxesKlassenmethode grid()wie folgt:

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
Schalten Sie die Achsengitter ein oder aus.

which kann 'major' (Standard), 'minor' oder 'both' sein, um zu steuern, ob Major Tick Grids, Minor Tick Grids oder beide betroffen sind.

axis kann 'beide' (Standard), 'x' oder 'y' sein, um zu steuern, welche Gitternetzlinien gezeichnet werden.

Um Gitterlinien sowohl für die x- als auch für die y-Achse anzuzeigen, können Sie den folgenden Code verwenden:

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

Diese Methode gibt uns eine genauere Kontrolle darüber, was für Gitterlinien angezeigt werden soll.

jdhao
quelle
6

Vielleicht kann dies das Problem lösen: matplotlib, definiere die Größe eines Gitters auf einem Plot

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

Die Wahrheit ist, dass das Gitter funktioniert, aber es gibt nur ein V-Gitter in 00:00 und kein Gitter in anderen. Ich habe das gleiche Problem, dass es am 1. November unter vielen Tagen nur ein Raster gibt.

Lory_yang
quelle
3

Kurze Antwort (lesen Sie unten für weitere Informationen):

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

Geben Sie hier die Bildbeschreibung ein

Was Sie tun, ist richtig und es sollte funktionieren.

Da jedoch die X - Achse in Ihrem Beispiel ist ein Datetime - Achse der Hauptstrichmarkierungen (höchstwahrscheinlich) erscheinen nur an den beiden Enden der X - Achse. Die anderen sichtbaren Häkchen sind kleinere Häkchen.

Die ax.grid()Methode zeichnet standardmäßig Gitterlinien auf Hauptmarkierungen. Daher wird in Ihrer Handlung nichts angezeigt.

Verwenden Sie den folgenden Code, um die Häkchen hervorzuheben. Majors werden blau sein, während Minors rot sind.

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')

Um zu erzwingen, dass die Gitterlinien auch auf den kleinen Häkchen angezeigt werden, übergeben Sie Folgendes which='minor'an die Methode:

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

oder verwenden Sie einfach, which='both'um sowohl Haupt- als auch Nebengitterlinien zu zeichnen. Und das ist eine elegantere Gitterlinie:

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

Nur für horizontale Linien

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

Das hat funktioniert

Schlamm
quelle