pandas의 시계열 플롯의 시간축을 matplotlib로 다시 포맷

df.plot() 뒤에 set_major_formatter() 하면 xtick의 년과 월의 표기가 깨지는 문제에 시달리고 있었지만, 해결했기 때문에 메모.

전제



pandas: 0.24.2
matplotlib : 3.1.0

데이터 준비


import pandas as pd
import numpy as np

N = 100
x = np.random.rand(N)
y = x**2

df = pd.DataFrame(
    index=pd.date_range('2020-01-01', periods=N, freq='D'),
    data=dict(x=x, y=y)
)
df.head()



문제없는 사례


# pandasのプロット機能を使用
df.plot()


DataFrame의 index가 DatetimeIndex인 경우, 자동적으로 tick을 포맷 해 준다.
이 형식으로 괜찮다면, 그래.

문제가 되는 경우


import matplotlib.dates as mdates

# pandasのプロット機能を使用
ax = df.plot()

# フォーマットし直す
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))



%Y에 대한 표시가 이상합니다. 0051년에 무엇···.
아래 사이트에 따르면 pandas와 matplotlib의 datetime 유틸리티는 호환성이 없기 때문입니다.
htps // 코데에에ぁmpぇs. 네 t/그럼/q/2아2아615

해결책


import matplotlib.dates as mdates

# x_compatオプションを渡す。これでtickの自動調整が抑制される。
ax = df.plot(x_compat=True)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))



%Y가 제대로 2020년이 되었습니다!
※이 예라면 「pandas의 포맷 쪽이 좋지 않다?」라고 되어 버립니다만, 거기는 용서를·・

x_compat는 x_compatibility의 약자?
공식 문서에 의하면, x_compat는 tick의 자동 조정을 억제하는 파라미터이다.
htps // 팬더 s. py였다. 오 rg / 팬더 s-도 cs / s 타 b ぇ / 우세 r_ 구이로 / ぃ す ああ ざ ち ん. html # 쑤쑥쑥갓 ㅡㅡ

더 똑똑한 방법이 있다면 교수해 주시면 감사하겠습니다.

좋은 웹페이지 즐겨찾기