** 함께 보시면 좋습니다.
파이썬을 이용한 바람장미 그리기 두 번째
지난 포스팅에서 방사형 그래프에다가 태풍이 지나갈 때 풍향 및 풍속 변화를 나타내는 그래프를 그린적이 있습니다. 태풍의 풍향 풍속을 바람 장미(방사형 그래프)에 표현하기 지구과학 I 수능
kalchi09.tistory.com
지구과학 I 수능이나 모의고사에서 태풍 관련 단원에 대한 문제가 출제되면 종종 보이는 그래프 중 하나가 바람장미 그래프입니다. 아래와 같은 그래프인데요,
저 문제를 풀이하는게 이번 포스팅의 목적은 아니니 풀이는 집어 치우고, 저런 바람장미 그래프를 보면, 시간별 풍향이나 풍속 변화를 한 눈에 알아보기 쉽습니다. 이번 포스팅에서는 파이썬으로 저 바람장미를 그리는 방법을 알아볼 예정입니다.
데이터는 기상청에서 다운받을 수 있지만, 제가 미리 태풍 콩레이가 상륙했을 때 제주도의 성산과 고산에서 관측한 관측자료를 기상청에서 다운로드하여 준비해 두었습니다. 다운로드 받아 사용하세요. 바이러스 같은건 심어두지 않았으니 걱정 안하셔도 됩니다.ㅎㅎ 두 지역의 모든 풍향 풍속 데이터는 아니고, 관측소에 접근하기 직전 01시 30분 부터 07시 30분 까지 정도만 추렸습니다.
그림을 보시면 time은 시간, sdirec와 svel, spres는 각각 성산에서 관측한 풍향, 풍속, 기압이고, gdirec와 gvel, gpres는 각각 고산에서 관측한 풍향, 풍속, 기압 변화입니다. 기압 변화는 필요 없으니 이번에는 생각하지 말고, 풍향, 풍속 변화만 신경써 보겠습니다.
풍향은 모두 북쪽을 기준으로 시계방향으로 잰 각도(dgree)입니다. 보통 파이썬에서 각도 표시는 숫자를 그대로 쓰면, 컴퓨터가 알아먹지를 못해서 라디안으로 바꿔 제시해 줘야합니다. 그때 필요한 라이브러리가 math라는 라이브러리이기 때문에, 이놈을 불러와야 합니다. 또 csv 파일을 불러올 것이기 때문에 pandas가 필요하고, 그래프를 그려야 하니 matplotlib가 필요합니다. 차례대로 라이브러리를 호출해 봅시다.
from math import radians
import pandas as pd
import matplotlib.pyplot as plt
다음으로 판다스를 이용해 csv를 읽어오고, sdirec와 gdirec의 데이터를 모두 라디안으로 바꾸어 주겠습니다.
data=pd.read_csv('C:\\111\\typhoon.csv') ## csv 읽기
sdirec=data['sdirec'] ## typhoon.csv 에서 성산의 풍향 데이터 추출
sdirec = [radians(a) for a in sdirec] ## 풍향 데이터를 모두 라디안으로 바꾸어줌
svel=data['svel'] ## typhoon.csv 에서 풍속 데이터 추출
gdirec=data['gdirec'] ## typhoon.csv 에서 고산의 풍향 데이터 추출
gdirec = [radians(a) for a in gdirec] ## 풍향 데이터를 모두 라디안으로 바꾸어줌
gvel=data['gvel'] ## typhoon.csv 에서 풍속 데이터 추출
데이터는 모두 불러왔으니 이제 그래프를 그릴 차례입니다. 우리가 원하는것은 방사형 좌표입니다. 따라서
plt.figure(figsize=(8,8)) ## 그래프의 크기를 지정해 주는 항목입니다. 원치 않으면 궂이 쓰지 않아도 되요
plt.style.use('ggplot') ## 그래프를 좀더 예쁘게 그리기 위해 그리드 형식을 나타낸 것입니다. 원치 않으면 패스
sp = plt.subplot(projection='polar') ## 중요합니다. 서브 플롯을 지정하고, projection에서 투영 방법을 polar로 지정해 주는 것입니다. polar로 지정해 주어야 방사형으로 투영해 줍니다.
sp.set_theta_zero_location('N') ## 영점의 위치를 잡아주는 것입니다. 북쪽이 영점이어야 하기 때문에 N, 영점의 위치를 바꾸고 싶다면 E, S, W 등으로 지정해 주면 되요
sp.set_theta_direction(-1) ## 각도 변화 방향을 시계방향, 반시계 방향인지 지정해 주는 건데, -1은 시계방향, +1은 반시계 방향입니다.
plt.scatter(sdirec, svel, label='Sungsan', marker='x') ## 위에서 쭉 그린 방사형 그래프에 점을 찍어 표현하겠다는 의미입니다. label과 marker는 각각 범례와, 점의 모양입니다. sdirec가 x축으로 바람 방향, svel은 y축으로 바람 속도입니다.
plt.scatter(gdirec, gvel, label='Gosan') ## 위와 마찬가지. marker를 별도로 지정하지 않았기 때문에 점으로 찍힙니다.
plt.legend() ## 범례를 표시하기 위한 코드
plt.ylim(0,28) ## y축, 즉 풍속의 크기 범위를 정해주는 코드
plt.savefig('C:\\111\\typhoon_scat.png', dpi=300) ## 그린 그래프를 저장
plt.show()
코드가 다소 복잡해 보이지만, 전부 그래프를 이쁘게 그리기 위한 것들일 뿐, 필수 코드만 두면 얼마되지 않습니다.
어쨌든 그래프를 그리면
짠. 점에 시간을 일일이 표시하지 않았지만, (뭐 원하면 표시하면 되긴 합니다. plt.text라는 코드를 이용하면 되요), 시간의 흐름 방향은 아래와 같습니다.
성산과 고산에서 모두 반시계 방향으로 풍향이 변화하였습니다.
실제 태풍 콩레이의 진로와 성산 고산의 위치를 볼까요?
성산은 사실 태풍의 눈이 통과하긴 했지만, 이동 경로를 기준으로 보면 왼쪽에 있고, 고산역시 태풍 이동경로의 왼쪽에 있습니다. 두 지역 모두 왼쪽에 있어서 바람은 반시계방향으로 변할 건데, 관측 결과가 정확히 일치합니다.
아래에 전체 코드를 써 두니 필요하신 분은 그대로 긁어다가 쓰시면 되겠네요..ㅎㅎ
from math import radians
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_csv('C:\\111\\typhoon.csv')
sdirec=data['sdirec']
sdirec = [radians(a) for a in sdirec]
svel=data['svel']
gdirec=data['gdirec']
gdirec = [radians(a) for a in gdirec]
gvel=data['gvel']
plt.figure(figsize=(8,8))
plt.style.use('ggplot')
sp = plt.subplot(projection='polar')
sp.set_theta_zero_location('N')
sp.set_theta_direction(-1)
plt.scatter(sdirec, svel, label='Sungsan', marker='x')
plt.scatter(gdirec, gvel, label='Gosan')
plt.legend()
plt.ylim(0,28)
plt.savefig('C:\\111\\typhoon_scat.png', dpi=300)
plt.show()
'파이썬으로 배우는 지구과학' 카테고리의 다른 글
파이썬을 이용하여 해수의 깊이에 따른 수온 변화 그래프 그리기 (0) | 2022.02.17 |
---|---|
조석 예보표를 이용하여 날짜별 물때 변화 그래프 그리기 (3) | 2021.12.27 |
파이썬의 pie chart로 지질시대 시간표 만들기 (0) | 2021.07.02 |
원주에서 기온이 가장 높았던 때는 언제일까? (0) | 2021.05.31 |
파이썬을 이용하여 광물의 절대 굳기 그래프 그리기 (0) | 2021.05.21 |
댓글