기상청 기온 분석 그래프 만들기

김시헌·2025년 6월 12일

기상청에서 만든 기온 분석 그래프를 만들어보겠습니다.

https://data.kma.go.kr/stcs/grnd/grndTaList.do?pgmNo=70

fig = go.Figure()

fig.add_trace(go.Scatter(x=df['날짜'], y=df['최고기온(℃)'],   # x축은 날짜 (datetime 형식 추천) y축은 최고기온 데이터
                         mode='lines+markers', # 'lines'는 선만 그림 (마커 없이)
                         name='최고기온', # 범례에 표시될 이름
                         line=dict(color='red'))) # 선 색상: 빨간색
marker=dict(size=8, symbol='circle', opacity=0),  # 기본 마커는 숨김

fig.add_trace(go.Scatter(x=df['날짜'], y=df['평균기온(℃)'],
                         mode='lines+markers',
                         name='평균기온',
                         line=dict(color='green')))
marker=dict(size=6, symbol='circle', opacity=0),

fig.add_trace(go.Scatter(x=df['날짜'], y=df['최저기온(℃)'],
                         mode='lines+markers',
                         name='최저기온',
                         line=dict(color='blue')))
marker=dict(size=6, symbol='circle', opacity=0),

# 전체 레이아웃 설정
fig.update_layout(
        font=dict(
        family="Arial",  # 원하는 글꼴 (예: "Noto Sans CJK KR", "Malgun Gothic" 등 한글 지원 글꼴도 가능)
        size=12,         # 전체 글자 크기
        color="black"    # 전체 글자 색상
    ),
    hovermode="x unified",# 마우스 오버 시 동일 x 위치의 모든 y 값을 하나로 묶어서 보여줌
    hoverlabel_bgcolor="rgba(0, 0, 0, 0.2)",
    hoverlabel_font_color='white',
    title=dict(
        text='기온분석 기본 서울(108) 일자료 기간 : 20250513~20250611',
        x=0.5,
        xanchor='center'
    ),
    xaxis_title='', # x축 제목 없음 (빈 문자열)
    yaxis_title='기온(°C)', # y축 제목: 기온 단위 포함

    xaxis=dict(
        tickformat='%Y-%m-%d',  # x축 날짜 형식: 2025-06-01 처럼 표시
        showgrid=True,
        dtick=345600000,
        range=[ '2025-05-13', df['날짜'].max() ],
        rangeslider=dict(
            visible=True,
            bgcolor="rgba(219, 219, 219, 1)",
            bordercolor="lightgray",
            borderwidth=1,
            range=['2025-05-13', df['날짜'].max()]
        )
    ),
    yaxis=dict(
        range=[0, 35], # 최소 0, 최대 35도
        dtick=5, # 5도의 간격
        showgrid=True # y축 방향의 그리드 라인 표시
    ),
    legend=dict(
        orientation="h", # 범례를 수평으로 정렬 (가로)
        yanchor="bottom", # 범례 박스의 기준점을 아래쪽에 맞춤
        y=1.02, # y=1.02는 그래프 위에 살짝 띄우는 위치
        xanchor="center", # 범례 위치 기준을 가운데로
        x=0.5, # x=0.5는 그래프 중앙
        font=dict(size=12), # 범례 글씨 크기 설정
    )
)

fig.show()

위에 링크에 나온 기상청 그래프와는 많이 다르지만 최대한 비슷하게 만들어보았습니다.
상호작용이 될만한 것들은 전부 기능 작동하게 만들었습니다.

이 그래프를 만들면서 가장 힘들었던 부분은 hover 부분입니다. 기상청 그래프는 기온 그래프에 마우스 커버를 갖다대면 동그라미 표시가 나타나지만 그 기능은 구현하지 못한점 등등에서 고난한거같습니다. 다른 부분들은 간단하게 구현이 되었지만, hover는 구현이 어려웠습니다.

0개의 댓글