Chcę uzyskać na wykresie zarówno poziome, jak i pionowe linie siatki, ale domyślnie pojawiają się tylko poziome linie siatki. Używam pandas.DataFrame
z kwerendy sql w Pythonie, aby wygenerować wykres liniowy z datami na osi x. Nie jestem pewien, dlaczego nie pojawiają się one w datach i próbowałem znaleźć odpowiedź na to pytanie, ale nie mogłem jej znaleźć.
Wszystko, czego użyłem do wykreślenia wykresu, to prosty kod poniżej.
data.plot()
grid('on')
data to DataFrame, która zawiera daty i dane z zapytania sql.
Próbowałem również dodać poniższy kod, ale nadal otrzymuję ten sam wynik bez pionowych linii siatki.
ax = plt.axes()
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines
Jakieś sugestie?
python
matplotlib
pandas
Osmond Bishop
źródło
źródło
data.plot(grid="on")
pracował dla mnieOdpowiedzi:
W wywołaniach może być konieczne podanie argumentu logicznego, np. Użyj
ax.yaxis.grid(True)
zamiastax.yaxis.grid()
. Dodatkowo, ponieważ używasz obu z nich, możesz łączyć wax.grid
, co działa na obu, zamiast robić to raz dla każdego wymiaru.ax = plt.gca() ax.grid(True)
To powinno cię rozwiązać.
źródło
plt.show()
ipython --pylab
iplt.grid(True)
od razu - czy widzisz siatkę?plt.grid(True)
i otrzymałem pusty wykres z pionowymi i poziomymi liniami siatki, więc tak, to dziwne, dlaczego nie mogę tego uzyskać dla mojego wykresu liniowego. Używam najnowszej dostępnej wersji iPythona.plt.gca().xaxis.grid(True)
okazało się dla mnie rozwiązaniemźródło
myaxes.grid(which='x')
nie działało dla mnie z matplotlib w wersji 1.4.2 ... nie mogłem w ogóle zmusićwhich
słowa kluczowego do działania. Jednakmyaxes.xaxis.grid(True)
załatwił sprawę i jest koncepcyjnie lepszy IMO. Aha, i nie zapomnij o użytecznejmyaxes.set_axisbelow(True)
metodzie umieszczania siatki za danymi.Zgodnie z dokumentacją matplotlib , sygnatura metody
Axes
klasygrid()
wygląda następująco:Aby wyświetlić linie siatki zarówno dla osi x, jak i osi y, możemy użyć następującego kodu:
ax = plt.gca() ax.grid(which='major', axis='both', linestyle='--')
Ta metoda daje nam większą kontrolę nad tym, co wyświetlać na liniach siatki.
źródło
może to rozwiąże problem: matplotlib, zdefiniuj rozmiar siatki na działce
ax.grid(True, which='both')
Prawda jest taka, że siatka działa, ale jest tylko jedna siatka V o godzinie 00:00 i nie ma siatki w innych. Spotykam się z tym samym problemem, że w dniu 1 listopada jest tylko jedna siatka na wiele dni.
źródło
Krótka odpowiedź (więcej informacji poniżej):
ax.grid(axis='both', which='both')
To, co robisz, jest poprawne i powinno działać.
Ponieważ jednak oś X w naszym przykładzie jest osią DateTime, główne znaczniki (najprawdopodobniej) pojawiają się tylko na obu końcach osi X. Inne widoczne znaczniki to Drobne znaczniki.
ax.grid()
Metoda domyślnie rysuje linie siatki na głównych tick-znaków. Dlatego nic nie pojawia się w twojej fabule.Użyj poniższego kodu, aby zaznaczyć znaczniki. Major będzie niebieski, a drugorzędny czerwony.
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')
Teraz, aby wymusić, aby linie siatki pojawiały się również na drobnych znacznikach, przekaż
which='minor'
do metody:ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')
lub po prostu użyj,
which='both'
aby narysować główne i drugorzędne linie siatki. A to bardziej elegancka linia siatki:ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--') ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')
źródło
Tylko dla linii poziomych
ax = plt.axes() ax.yaxis.grid() # horizontal lines
To zadziałało
źródło