시계열 플롯 시작했습니다~파이썬편~

소개



이 기사는 MicroAd Advent Calendar 2019의 22 일째 기사입니다.

하고 싶은 일



로그 데이터를 시각화할 때 시계열 플롯은 매우 유용한 수단입니다.
지금까지는 가로축의 일자를 적당히 숫자로 옮겨 플롯하고 도망 온, 그런 인생을 보내 왔습니다.
그러나 지금은 다릅니다. 가로축을 시계열로 하여 잘 플롯할 수 있게 되었습니다!
그래서 그 이야기를 비망록으로 정리하고 싶습니다.
여기서 작성한 그래프는 최소한의 옵션만 사용하고 있습니다.

방법


matplotlib.dates 를 사용하면 좋은 느낌으로 플롯할 수 있습니다.
코드 예제는 다음과 같습니다.

매일


import io
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()


def main():
    data = """date,value
    2018-12-01,15
    2018-12-02,30
    2018-12-03,25
    2018-12-04,18
    2018-12-05,9
    2018-12-06,22
    2018-12-07,34
    2018-12-08,33
    2018-12-09,28
    2018-12-10,22
    2018-12-11,26
    2018-12-12,31"""
    df = pd.read_csv(io.StringIO(data), parse_dates=[0])

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(df['date'], df['value'])

    ##以下をカスタマイズする
    daysFmt = mdates.DateFormatter('%Y-%m-%d')
    ax.xaxis.set_major_formatter(daysFmt)
    fig.autofmt_xdate()

    plt.show()


if __name__ == '__main__':
    main()

이 코드로 완성된 그림은 다음과 같습니다.


조금 표시 방법을 바꿀 때는,
    daysFmt = mdates.DateFormatter('%Y-%m-%d')

여기를 괴롭히면 괜찮습니다.
    daysFmt = mdates.DateFormatter('%m/%d')

위와 같이 바꾸면 x축 레이블이 아래와 같이 표시됩니다.


일시마다



데이터를 조금 바꾸어 일시마다 해 봅니다.

import io
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()


def main():
    data = """date,value
        2018-12-01 00,15
        2018-12-01 01,30
        2018-12-01 02,25
        2018-12-01 03,18
        2018-12-01 04,9
        2018-12-01 05,22
        2018-12-01 06,34
        2018-12-01 07,33
        2018-12-01 08,28
        2018-12-01 09,22
        2018-12-01 10,26
        2018-12-01 11,31"""
    df = pd.read_csv(io.StringIO(data), parse_dates=[0])

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(df['date'], df['value'])

    ##以下をカスタマイズする
    daysFmt = mdates.DateFormatter('%m/%d %H:%M')
    ax.xaxis.set_major_formatter(daysFmt)
    fig.autofmt_xdate()

    plt.show()


if __name__ == '__main__':
    main()

얻어진 도면은 이하와 같다.


눈금의 빈도 변경



눈금의 빈도를 변경하려면 다음 두 줄을 추가합니다.
    daysLoc = mdates.HourLocator(byhour=None, interval=3, tz=None)
    ax.xaxis.set_major_locator(daysLoc)

이것으로 눈금의 빈도가 바뀝니다.

상당히 외로운 그림이 되어 버렸습니다.
이번에는 interval 로 설정했지만 interval 옵션을 삭제하고 byhour=range(2, 12, 3) 로 설정해도 정확히 같은 결과를 얻을 수 있습니다.
여기서 사용한 HourLocater 이외에도 MonthLocator, WeekdayLocator, DayLocator, MonthLocator, MinuteLocator, SecondLocator 등 많이 있다고 합니다.

축 라벨 회전



축 라벨이 너무 길어 튀어 버린다! 그렇다면 회전시킬 수 있습니다.
다음 두 줄을 추가하면 가능합니다.
    labels = ax.get_xticklabels()
    plt.setp(labels, rotation=45)

얻어진 그림은 이대로.

확실히 라벨의 각도가 대체되어 있는지 확인할 수 있습니다.

마지막으로



자신이 시계열 플롯할 때 필요한 최소한의 옵션을 정리했습니다.
상황에 따라 더 이해하기 쉬운 그래프를 작성하십시오!
시각화가 가능했기 때문에 다음은 시계열 해석입니다 ...

참고 자료



matplotlib.dates (공식 문서)
matplotlib에서 시계열 데이터를 플롯 할 때 축 설정 + 덤
파이썬 matplotlib 시계열 그래프 (시간축 설정)
matplotlib.dates에서 시계열 데이터 그래프의 축 눈금 설정하기

좋은 웹페이지 즐겨찾기