[Matplotlib] ax.xaxis.set_major_locator(dates.MinuteLocator())

이슬비·2022년 9월 6일
0

Reveiwing Errors

목록 보기
3/4
post-thumbnail

1. 배경설명 ✏️

오류...는 아니고,
한 3일 붙잡고 있었던 부분을 해결하게 되어서 남긴다.

붙잡고 있었던 부분은 matplotlib의 date.MinuteLocator이다.
사실은 삽질에 거의 가까웠다.

x축은 시간, y축은 load값으로 설정하여 plot을 그려야했다.
시간 단위(시간, 분 혹은 초)를 기준으로 나누려고 했으나... x축이 자꾸만

이렇게 의도와는 다르게 흘러갔다.

2. 해결방법 💡

가장 큰 문제는 HourLocator를 사용한 것이었다.
x축의 최솟값과 최댓값의 차는 고작 10분이었는데 HourLocator을 사용해 1시간 단위로 잘라라! 라고 명령을 하니 당연히 위와 같은 결과만 내뱉는 것이었다.

그래서

    ax = plt.gca()
    ax.xaxis.set_major_formatter(hfmt)
    ax.xaxis.set_major_locator(dates.MinuteLocator(1))

이와 같이 코드를 수정하였다. 수정한 부분은 HourLocator에서 MinuteLocator로 바꿨다는 것이다. 1을 포함해서 .....

문제는 1을 포함했다는 것이었다!

정확한 원인은 찾지 못했으나, 아마 해당 함수가 1이 어느 파라미터의 값으로 들어가야하는지 몰랐다는 것이 내 의견이다.

interval 값은 1이 default이므로 해당 값을 지우고,

    ax = plt.gca()
    ax.xaxis.set_major_formatter(hfmt)
    ax.xaxis.set_major_locator(dates.MinuteLocator())

이와 같이 코드를 실행하니 아래와 같이 예쁘게 잘 그려졌다!


Matplotlib의 date.MinuteLocator

Matplotlib를 통해 plot을 그릴 때에 x축이 시간 데이터라면 표시되는 시간의 간격을 조정할 수 있다.
Locator는 Minute, Hour, Month 등 다양한 단위로 존재하니, 아래의 링크에 들어가서 확인해보면 될 듯하다.
https://matplotlib.org/stable/api/dates_api.html

plot을 fig와 ax를 통한 subplot으로 그렸다면,

    ax.xaxis.set_major_formatter(hfmt) # date formatting을 위한 코드
    ax.xaxis.set_major_locator(dates.MinuteLocator())

위와 같은 코드를 추가하면 된다.

하지만 plt.plot과 같이 ax를 따로 설정해주지 않았다면,

    ax = plt.gca()
    ax.xaxis.set_major_formatter(hfmt)
    ax.xaxis.set_major_locator(dates.MinuteLocator())

이와 같이 plt.gca()를 이용해 축을 설정해주어야 한다. 쉽게 설명하면 나 이제 축 좀 쓸게! 라고 plot을 그리는 컴퓨터에게 알려주는 부분이다.


그리고 만일 축에 그려지는 시간을 3분의 간격을 두고 싶다면, ```python ax = plt.gca() ax.xaxis.set_major_formatter(hfmt) ax.xaxis.set_major_locator(dates.MinuteLocator(interval=3)) ```

과 같이 interval=3을 추가해야 한다. 꼭... interval이라는 파라미터를 함께 선언해주기 ... 그래야 나와 같은 삽질을 하지 않을 수 있다 ^^

profile
정말 알아?

0개의 댓글