matplotlib의 라인 플롯에 수직 격자 선이 나타나도록하기


95

내 플롯에 수평 및 수직 그리드 선을 모두 얻고 싶지만 기본적으로 수평 그리드 선만 나타납니다. pandas.DataFramex 축에 날짜가있는 선 플롯을 생성하기 위해 Python의 SQL 쿼리에서를 사용하고 있습니다. 왜 그들이 날짜에 나타나지 않는지 잘 모르겠고 이것에 대한 답을 찾으려고 노력했지만 찾을 수 없었습니다.

그래프를 그리는 데 사용한 것은 아래의 간단한 코드뿐입니다.

data.plot()
grid('on')

data는 SQL 쿼리의 날짜와 데이터를 포함하는 DataFrame입니다.

또한 아래 코드를 추가하려고 시도했지만 수직 격자 선이없는 동일한 출력을 얻습니다.

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

어떤 제안?

여기에 이미지 설명 입력


data.plot(grid="on")나를 위해 일한
마르쿠스

답변:


101

당신은 예를 들어 사용자의 통화에서 부울 인수를주고 사용해야 할 수도 있습니다 ax.yaxis.grid(True)대신 ax.yaxis.grid(). 또한 두 가지를 모두 사용 ax.grid하고 있기 때문에 각 차원에 대해 한 번 수행하는 대신 두 가지 모두에서 작동하는 로 결합 할 수 있습니다 .

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

그것은 당신을 분류해야합니다.


나는 그것을 시도했지만 어떤 이유로 여전히 이전과 같은 모양
오스 몬드 주교

1
인터랙티브 인터프리터에서 이것을하고 있습니까? 전화 하기 전에 그리드 설정하고 있는지 확인하십시오plt.show()
wim

iPython을 사용하고 있습니다. 나는 plt.show ()를 추가하려고 시도했지만 차이가 없습니다.
Osmond Bishop

1
글쎄, 이것은 이상합니다. 당신의 ipython 버전은 또한처럼 실행 해 무엇 ipython --pylab, 그리고 않는 plt.grid(True)당신은 그리드를 볼 수 있습니까 - 즉시?
wim

나는 plt.grid(True)수직 및 수평 그리드 선이 모두있는 빈 그래프를 얻었으므로 네 선 플롯에 대해 이것을 얻을 수없는 것이 이상합니다. 사용 가능한 최신 버전의 iPython을 실행하고 있습니다.
Osmond Bishop

59

plt.gca().xaxis.grid(True) 나를위한 해결 책임을 입증


6
myaxes.grid(which='x')하기 matplotlib 버전 1.4.2와 나를 위해 작동하지 않는 ... 얻가 없습니다 which전혀 작업에 키워드를. 그러나 myaxes.xaxis.grid(True)트릭을 수행했으며 개념적으로 더 나은 IMO입니다. 아, 그리고 myaxes.set_axisbelow(True)데이터 뒤에 그리드를 배치하는 유용한 방법을 잊지 마십시오 .
travc

27

matplotlib 문서에 따르면Axes 클래스 grid()메서드 의 서명은 다음과 같습니다.

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
축 그리드를 켜거나 끕니다.

which 'major'(기본값), 'minor'또는 'both'를 사용하여 주요 눈금 그리드, 보조 눈금 그리드 또는 둘 모두가 영향을 받는지 여부를 제어 할 수 있습니다.

axis 그릴 격자 선 집합을 제어하기 위해 'both'(기본값), 'x'또는 'y'가 될 수 있습니다.

따라서 x 축과 y 축 모두에 대한 격자 선을 표시하기 위해 다음 코드를 사용할 수 있습니다.

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

이 방법을 사용하면 그리드 선에 대해 표시 할 내용을보다 세밀하게 제어 할 수 있습니다.


7

아마도 이것은 문제를 해결할 수 있습니다 : matplotlib, 플롯의 그리드 크기 정의

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

진실은 그리드가 작동하고 있지만 00:00에는 하나의 v 그리드 만 있고 다른 그리드에는 그리드가 없다는 것입니다. 여러 날 중 11 월 1 일에 그리드가 하나뿐이라는 동일한 문제가 발생합니다.


3

짧은 대답 (자세한 내용은 아래 참조) :

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

여기에 이미지 설명 입력

당신이하는 일은 정확하고 작동 할 것입니다.

그러나 예제 의 X 축이 DateTime 축 이기 때문에 눈금 (아마도)은 X 축의 양쪽 끝에 만 나타납니다. 다른 눈에 보이는 눈금은 보조 눈금입니다.

ax.grid()방법은 기본적으로 주 눈금 표시에 격자 선을 그립니다. 따라서 플롯에 아무것도 나타나지 않습니다.

아래 코드를 사용하여 체크 표시를 강조하십시오. 메이저는 파란색이고 마이너는 빨간색입니다.

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

이제 그리드 선이 보조 눈금에도 나타나도록 강제 which='minor'하려면을 메서드에 전달합니다 .

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

또는 단순히 사용 which='both'하여 주 및 보조 그리드 선을 모두 그립니다. 그리고 이것은 더 우아한 격자 선입니다.

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

1

수평선 만

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

이것은 효과가 있었다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.