- 개요
저번 포스트에서는 오른쪽 y축을 여러 개 그렸습니다.
오늘은 왼쪽에 y축을 여러 개 그려보겠습니다.
이번 포스트에서는 저번 코드를 활용하여
오른쪽 y축에는 이전과 같이 현지기압, 습도를 그리고
왼쪽 y축에는 에는 10분 평균 풍향, 10분 평균 풍속, 온도를 그리겠습니다.
- 오른쪽 y축 여러 개 그리기
저번 포스트에서 spines.right.set_position으로 오른쪽 y축의 위치를 바꾸었고, 이 메서드를 조금만 수정하면 왼쪽 축도 바꿀 수 있습니다.
다만 그 전에 twinx() 메서드로 생성한 액시스는 자동으로 y축, y tick, y label을 오른쪽으로 설정하기 때문에 y축의 tick과 label position도 'left'로 변경해주어야합니다.
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
y_TA = df['TA']
y_PS = df['PS']
y_HM = df['HM']
y_WS = df['WS10']
x = range(len(y_TA))
color_TA = 'red'
color_PS = (255./255., 51./255., 204./255.)
color_HM = (0, 102./255., 153/255.)
color_WS = (50./255., 108./255., 17./255.)
color_WD = (255./255., 153./255., 51./255.)
fig = plt.figure(figsize=(13,5))
# 온도
color = color_TA
ax_TA = fig.add_subplot()
ax_TA.plot(x, y_TA, color=color, lw=1)
ax_TA.set_ylim(10, 30)
ax_TA.set_yticks(range(10, 30+1, 2))
# 현지기압
color = color_PS
ax_PS = ax_TA.twinx()
ax_PS.plot(x, y_PS, color=color, lw=1)
ax_PS.set_ylim(999, 1019)
ax_PS.set_yticks(range(999, 1019+1, 2))
# 습도
color = color_HM
ax_HM = ax_TA.twinx()
ax_HM.plot(x, y_HM, color=color, lw=1)
ax_HM.set_ylim(0, 100)
ax_HM.set_yticks(range(0, 100+1, 10))
ax_HM.spines.right.set_position(('outward', 40))
# 풍속
color = color_WS
ax_WS = ax_TA.twinx()
ax_WS.plot(x, y_WS, color=color, lw=1)
ax_WS.set_ylim(0, 20)
ax_WS.set_yticks(range(0, 20+1, 2))
ax_WS.yaxis.set_ticks_position('left') # y축의 tick 위치를 왼쪽으로 바꿈
ax_WS.yaxis.set_label_position('left') # y축의 label 위치를 왼쪽으로 바꿈
ax_WS.spines.left.set_position(('outward', 30)) # y축 자체의 위치를 왼쪽의 특정 위치로 지정
# 풍향
"""
AWS 풍향 자료의 범위는 0부터 360까지
기상청에서 제공하는 AWS 그래프의 풍향 축을 보면 y=0 위치에 'E'가 적혀있습니다.
동풍은 AWS 풍향 자료에서 90도입니다.
그러므로 0~360인 풍향자료를 90부터 450(360+90)까지의 범위로 바꿔줍시다.
"""
y_WD = df['WD10']
df.loc[df['WD10'] < 90, 'WD10'] += 360
color = color_WD
ax_WD = ax_TA.twinx()
ax_WD.scatter(x, y_WD, color=color, s=4) # 풍향은 scatter plot 사용
ax_WD.set_ylim(90, 90+360)
ax_WD.set_yticks(range(90, 90+360+1, 90))
ax_WD.set_yticklabels(['E', 'S', 'W', 'N', 'E'])
ax_WD.yaxis.set_ticks_position('left')
ax_WD.yaxis.set_label_position('left')
ax_WD.spines.left.set_position(('outward', 60))
저번 코드에 풍속, 풍향을 그리는 부분을 추가했습니다.
다음 포스트에서는 강수량을 그릴 생각인데요.
저도 처음에 큰 생각 없이 아무 날이나 뽑은거라 하필이면 서울에서 6월 1일~2일까지 강수가 없네요...
아무튼 다음 포스트에서는 다른 날을 선정해서 강수도 그려보겠습니다.
'대기과학 > 프로그래밍' 카테고리의 다른 글
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 4: y축, 축의 라벨 색 바꾸기 (0) | 2024.07.18 |
---|---|
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 3: 선과 음영 그리기 (1) | 2024.07.12 |
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 1: 오른쪽에 y축 여러 개 그리기 (0) | 2024.07.10 |
[ERA5 재분석 자료] 2. 시간(hourly) 자료를 일(daily) 자료로 변환하고 저장하기 (1) | 2024.07.01 |
[ERA5 재분석 자료] 1. API를 활용한 다운로드 (2024년 10월 수정) (0) | 2024.06.21 |