[Matplotlib] 기후 나선 그리기 1: NASA Climate Change 그림 설명 및 사용할 자료 설명
·
대기과학/프로그래밍
- 개요우린 NASA Climate Change의 그림을 그대로 따라그려야 하므로,그림에서 나오는 숫자들에 무슨 의미가 있고 그림이 어떻게 그려졌는지 분석할 필요가 있습니다. 이번 포스트에서는 먼저 NASA Climate Change의 Climate spiral 그림에 대해 간단히 알아보겠습니다.전 다른 기온 자료를 쓸 것이기에 이 그림에서 사용한 계산과정을 완전히 따라할 경우 문제가 좀 있습니다.그러므로 기온 자료 처리과정에서의 다른 점을 설명하고자 합니다. - Climate sprial 그림 설명먼저 NASA Climate Change에서 올린 영상의 설명을 요약해봅시다.NASA Climate Change는 1880년부터 2021년까지 전지구 평균 월평균 기온 아노말리를 시각화했고, 자료의 출처는 G..
[Matplotlib] 기후 나선 그리기 0: 프롤로그
·
대기과학/프로그래밍
안녕하세요.2024년은 8월, 9월이 정말 덥습니다.기후가 변하고 있기 때문일까요? 제 최근 포스트에서 최근 서울이 얼마나 더운지 알아보긴 했습니다.여름 온도, 습도의 변화 시각화 https://climate-data-science.tistory.com/3047108 서울 관측소 시각화 https://climate-data-science.tistory.com/31 위의 두 가지 시각화 방법도 기후변화의 모습을 잘 보여주지만평소에 저는 어떤 다른 방법을 기후변화를 시각화 하는 것이 좋은지 고민하곤 합니다. 알고리즘 때문인지 유투브 추천 영상에 'NASA Climate Change'의 영상이 추천되더군요.NASA Climate Change는 다양한 시각화 방법으로 기후변화를 보여줍니다.그래서 저도 여기 나온..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 9: 그리드 라인 그리기, 배경색 변경
·
대기과학/프로그래밍
- 개요방금 전에 8번째 포스트를 마쳤는데 어째다보니 작업이 금방 끝나서기상청 ASOS/AWS 그래프 따라 그리기의 마지막 포스트를 연재합니다. 오늘은 그리드 라인을 그리고, 배경색을 회색으로 변경하겠습니다. - 그리드 라인 그리기 및 회색 배경원본에서 그리드 라인이 어떻게 그려졌는지 확인해봅시다.아래의 원본을 보시면 세로 선은 3시간 간격으로 그려져 있고 00시는 검정색, 나머지 시간에서는 회색입니다.가로 선은 ytick라벨이 적힌 곳에 그려져 있습니다.모두 회색이며 중간에 위치하는 선만 실선 나머지는 dashed line입니다.마지막으로 원본의 배경색은 회색입니다. matplotlib에서는 gridline을 그리는 옵션이 따로 있긴 하지만저는 ax.axvline과 axhline을 사용하겠습니다ax.a..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 8: 바람 벡터 넣기
·
대기과학/프로그래밍
- 개요이제 슬슬 이번 연재의 끝이 보이네요.오늘은 x축 아래에 있는 바람 벡터를 그려보겠습니다. 그림 내부가 아니라 그림의 밖인 x축 아래에 화살표를 그려야하기 때문에 좌표 설정이 어려웠습니다...저도 좌표 변환을 하는 방법을 찾아보느라 시간이 걸렸네요. - matplotlib의 좌표계화살표를 그리기 전에 좌표에 대해 공부해봅시다.그림은 2차원이기 때문에 기본적으로 (x, y)의 2차원 좌표입니다.1. 데이터 좌표계우리가 ax.plot이나 ax.scatter로 그림을 그릴 때 입력하는 데이터의 숫자가 x, y 좌표입니다.예를 들어 ax.plot을 이용해 (-1,-1)부터 (1,1)까지 선을 긋는다면자동으로 x축, y축 범위가 -1~1까지 설정되고 선이 하나 그어질 것입니다. 다음에 ax.scatter로..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 7: x축 라벨 적기
·
대기과학/프로그래밍
- 개요저번에는 y축에 대한 포스트였고, 이번에는 x축에 대한 포스트입니다.아래의 빨간 영역의 x축 라벨과 비슷하게 만들어봅시다.  코드에 대해 알아보기 전에 무슨 작업을 해야하는지 고민합시다. 1. x축 라벨이 위에 있다.matplotlib의 x축 라벨 기본 위치는 아래이므로 수정해야 합니다.(사실 xticklabels 메서드를 사용 안할거라 그냥 x축 라벨 옵션을 꺼주기만 해도 되긴 함)2. x축 tick이 없다.이건 저번 y축 tick을 없애는 메서드를 그대로 적용하면 되겠죠.3. x축 라벨은 3시간 간격주의해야하는 점으로 00H는 글씨가 굵습니다.4. 그래프의 왼쪽, 오른쪽 y축 위에는 x축 라벨을 적지 않는다.아무래도 y축 라벨인 T, P와 겹치기 때문에 x축 라벨이 없는 것 같죠.5. 00H ..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 6: y축 제목, 단위 적기
·
대기과학/프로그래밍
- 개요저번 포스트에서는 변수 하나씩 그래프로 그렸던 작업을 for문으로 바꾸어 코드를 짧게 만들어 보았습니다.이렇게 for문으로 바꾸면 함수화하기 쉬워지므로 유지/보수 및 자동화가 쉬워집니다. 이번에는 y축 제목 및 단위를 적어보겠습니다. 지금까지 포스트 중에서 가장 간단한 일이 될 듯합니다. -  annotate() 메서드 사용전 annotate()를 써서 y축 제목과 단위를 적겠습니다.참고로 text() 메서드를 써도 무방합니다. annotate()와 text()의 주요 차이점은 좌표계 설정 방법이고, 제 생각에 annotate가 더 다루기 쉽습니다.annotate는 xycoords 키워드를 통해 좌표계를 설정하고, text는 transform 키워드로 좌표설정을 합니다. annotate 사용 예시..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 5: 반복하는 부분을 for문으로 만들기
·
대기과학/프로그래밍
- 개요하나의 axes에 그림을 여러 개 그리면 같은 코드를 여러 번 반복할 수밖에 없습니다.저는 6개의 변수를 그리기 때문에 6번의 비슷한 코드가 반복되죠.이런 부분은 for문으로 만들어야 관리 및 함수화하기 쉽습니다. 만약 for문으로 만들지 않는다면?실수를 1번 했을 때 수정을 6번 해야합니다. (같은 코드가 6번 반복되니까)또한, 나중에 코드를 재활용할 때도 수정을 6번 해야합니다.그리고 보통 몇 주, 몇 개월 후에 코드를 재활용하는 경우가 많습니다.오랜만에 코드를 다시보면 이 코드가 어떤 순서로 동작하는지 기억도 잘 안나는데코드는 엄청 길기 때문에 어디를 수정해야되는지도 알기 어려워 혼란스러울겁니다. 그리고 기상청 ASOS/AWS 따라그리기에 대한 포스트를 더 연재할 것이라 코드를 for문으로 ..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 4: y축, 축의 라벨 색 바꾸기
·
대기과학/프로그래밍
- 개요지금까지 제가 그린 그림의 축의 색은 모두 검정이었습니다.이번 포스트에서는 각 변수에 맞는 색으로 y축과 y축의 라벨의 색을 바꾸어보겠습니다.y축, yticklabel(라벨)의 위치는 아래 그림에서 확인해주세요.기상청이 그린 AWS 그래프에서는 ytick의 길이를 0으로 설정하기 때문에 색 지정을 따로 할 필요는 없습니다. - y축, tick, label 색 설정하기먼저 y축, tick, label 색을 설정하는 메서드를 알아보겠습니다.y축 색 설정y축 label 색 설정ax.spines.right.set_color('red') 오른쪽 y축ax.spines.left.set_color('red') 왼쪽 y축ax.tick_params(axis='y', labelcolor=color) (양쪽 y축의 색..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 3: 선과 음영 그리기
·
대기과학/프로그래밍
- 개요저번 포스트에서는 왼쪽에 여러 y축을 그렸습니다.강수량을 추가로 그려보려고 했지만 제가 처음에 고른 기간에는 강수가 없었습니다.그래서 강수가 있는 2023년 6월 25일부터 6월 26일까지의 자료를 사용하겠습니다.이번 포스트에서 주의할 점은 twinx로 그림을 그릴 때 나중에 그린 그림이 가장 위에 올라온다는 것입니다.선과 점을 그리는 것은 무엇이 먼저 그려지든 그림이 아예 안 보이는 것은 아니기에 큰 문제가 없습니다.하지만 강수량은 선과 점이 아니라 음영으로 특정 영역을 색칠합니다.선을 그린 다음에 음영을 칠하면 선이 아예 보이지 않습니다.그러므로 그리는 순서에 신경을 써야합니다. 참고로 matplotlib에서 zorder라는 속성을 쓰면 그림 그리는 순서를 변경할 수 있습니다.하지만 twinx..