지난 포스팅에서 방사형 그래프에다가 태풍이 지나갈 때 풍향 및 풍속 변화를 나타내는 그래프를 그린적이 있습니다.
이번에는 풍향과 풍속 변화를 한 눈에 알아보기 쉬운 바람장미(wind rose)라는 그래프를 그래 볼 것입니다. 제가 미리 그려놓은 아래 그래프를 보시면 알 수 있는데요, 아래의 그래프와 같은 형태가 바람장미라는 것입니다.
바람장미를 그리기 위해서는 windrose라는 라이브러리를 사용하는 방법도 있는데, 여기서는 matplotlib 라이브러리에서 방사형으로 그래프를 나타내는 형태에 막대 그래프를 집어 넣어서 표현하는 방법을 사용할 것입니다. 기본적인 코드는 matplotlib 홈페이지를 참고하였고 제가 아주 조금 변형하였 습니다.
## 라이브러리 호출
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
data=pd.read_csv("C:\\111\\windroseexam2.csv") ## 데이터 불러오기
direcr = data['direcr'] ## 헤더 정보 추출
vel = data['vel'] ## 헤더 정보 추출
colors = plt.cm.viridis(vel/2) ## 바람장미 색 구현
ax = plt.subplot(projection='polar') ## 그래프 그리기 및 그래프 형식 지정
ax.bar(direcr, vel, width=0.5, bottom=0, color=colors, alpha=0.6) ## 막대그래프 표현
ax.set_theta_zero_location('N') ## 시작점 북쭉을 위로
ax.set_theta_direction(-1) ## 시계방향으로 그래프 그리기
plt.savefig("C:\\111\\windrose.jpg", dpi=300) ## 그래프 저장
plt.show()
판다스를 이용해 csv파일을 불러오고, 헤더 정보를 추출하는건 그리 어렵지 않아 쉽게 아실 수 있을 것입니다.
colors = plt.cm.viridis(vel/2)는 막대그래프의 색상을 지정해 주는 것인데, plt.cm 이후에 색상 코드를 넣습니다. 색상 코드는 엄청 다양한데요, matplotlib 홈페이지에 가시면 무수히 많은 color map 종류를 보실 수 있습니다. 몇가지만 여기에 소개해 보면...
대충 이렇습니다. 여기 matplotlib 홈페이지 주소를 걸어 두니, 필요하신 분들은 가셔서 보시면 됩니다. 아무튼 matplotlib 개발자 분들에게 감사함을 표하며,,,,
아무튼 colors = plt.cm.viridis(vel/2) 를 이용하여 색상을 지정하는데, viridis가 색상이고, ()안에 있는건 색상의 범위를 나타내는 것입니다, min, max를 이용해 색상 범위를 나타내는 것도 있는데, 이건 여기서 논의하지는 않겠습니다. 색상 범위를 그냥 1,2,3,4,5같은 숫자로 하지 않고 vel/2라고 하는 것은, 저렇게 해 놓으면 막대 바에 따라 색상을 다르게 지정할 수 있어서 입니다. vel/2에서 숫자를 바꾸면 색상이 조금씩 달라지는걸 보실 수 있을 겁니다.
또한, ax = plt.subplot(projection='polar') 은 방사형 그래프를 불러오는 코드임도 알 수 있습니다.
ax.bar(direcr, vel, width=0.5, bottom=0, color=colors, alpha=0.6은) 막대를 디자인 하는 과정입니다.
direcr과 vel은 그래프의 x축과 y축을 지정해 주는 것으로, 여기서 x축은 도 단위로 표현된 풍향, vel은 풍속입니다. width는 막대의 두께, bottom은 막대의 시작점을 지시해 주는 것입니다. bottom=0이라고 별도로 지정해 주지 않더라도 0부터 시작되니, 궂이 넣지 않아도 됩니다. color는 앞서서 colors라는 변수로 만들어준 색깔, alpha는 투명도입니다. 0~1까지인데, 1로 해노면 아예 불투명한 상태입니다.
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
이건 지난번 태풍때도 설명했던 내용인데, 첫 번째 줄은 윗쪽을 어느 방향으로 둘 것인가 하는 것입니다. 가장 위쪽, 그러니까 12시 방향을 북쪽으로 두기 위해 저리 하였습니다. 그 다음줄은 시계방향으로 할래 반시계 방항으로 할래를 묻는건데, 동쪽은 오른쪽이니 저희는 시계방향으로 하기 위해 -1을 하였습니다. 반시계방향은 1입니다. 아무런 지정을 하지 않으면 기본적으로 반시계 방향으로 출력하니 꼭 써 주셔야 합니다.
이렇게 코드를 구현하면 아래와 같은 그래프가 나옵니다.
데이터는 실습을 위해 제가 임의로 만든 데이터입니다. 기상청에 가면 동네 예보 같은 곳에서 풍향 풍속 데이터를 얼마든지 가져와서 해 볼 수 있으니 한번 해보시는걸 추천드립니다. 추후 온대저기압이나 태풍과 같은 아이들이 지나갈 때 실제 데이터를 이용해 한번 해 볼 예정입니다.
'파이썬으로 배우는 지구과학' 카테고리의 다른 글
파이썬을 이용하여 타원 방정식 그래프 그리기 (0) | 2022.07.02 |
---|---|
파이썬을 이용하여 위도별 지구 반지름 계산하기 (0) | 2022.06.27 |
파이썬을 이용하여 사진의 RGB 색상 분석하기 (1) | 2022.06.15 |
파이썬을 이용하여 케플러 제 3법칙을 그래프로 나타내기 (0) | 2022.04.24 |
파이썬의 3D(3차원) 그래프 그리기를 이용하여 우리은하의 구상성단 분포 그리기 (9) | 2022.04.18 |
댓글