[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..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 2: 왼쪽에 y축 여러 개 그리기
·
대기과학/프로그래밍
- 개요저번 포스트에서는 오른쪽 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.pypl..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 1: 오른쪽에 y축 여러 개 그리기
·
대기과학/프로그래밍
- 개요xy 그래프를 그리다보면 y축을 여러 개 그려야 할 일이 있습니다.예를 들어 기상청에서 제공하는 AWS(자동기상관측) 그래프에는 축이 무려 6개나 나옵니다.왼쪽의 y축에는 R(강수량), W(풍향), S(풍속), T(온도)가 있고, 오른쪽의 y축에는 P(기압), H(습도)가 있습니다. 이번 포스트에서는 왼쪽에 y축 1개, 오른쪽에 y축 여러 개 그리는 방법에 대해 알아보겠습니다. 최종적으론 완벽하진 않더라도 아래의 AWS 그래프를 따라그리는 것을 목표로 포스트를 연재하겠습니다. - 오른쪽에 y축을 1개 추가하기오른쪽에 y축을 1개 추가하는 방법은 간단합니다.twinx() 메서드를 사용하고 그냥 plot으로 그래프를 그리면 끝입니다. 저는 API로 다운로드 받은 5분 간격 AWS 자료를 사용했습니다...
[Matplotlib] 타이틀(title)에서 한글 사용하기
·
프로그래밍/파이썬
- 개요우리는 matplotlib 라이브러리를 사용해서 다양한 그림을 그립니다.하지만 Matplotlib의 기본 설정에서는 figure의 제목이나 x축, y축 타이틀을 한글로 적을 수 없습니다.그럼 어떻게 해야 matplotlib의 그림에서 한글을 쓸 수 있는지 알아보겠습니다. - Matplotlib에서 한글 사용하기 (개별 설정)한글 폰트를 사용하는 방법은 간단합니다.한글 폰트를 사용하고자 부분에서 fonproperties를 설정해주면 됩니다.import matplotlib.pyplot as pltimport matplotlib.font_manager as fmfn_font = 'NanumGothic.ttf' # 나눔고딕 폰트 사용fig, ax = plt.subplots(1, 2, figsize=(6,..
[ERA5 재분석 자료] 2. 시간(hourly) 자료를 일(daily) 자료로 변환하고 저장하기
·
대기과학/프로그래밍
- 개요저번 포스트에서는 API로 ERA5 재분석 자료를 다운로드 받는 법을 알아보았습니다.[ERA5 재분석 자료] 1. API를 활용한 다운로드: https://climate-data-science.tistory.com/17 저는 일(daily) 자료로 분석할 일이 있는데 ERA5 재분석 자료는 시간(hourly) 자료입니다.즉 시간 자료를 일 자료로 변환해야합니다. 이번 포스트에서는 시간 자료를 일 자료로 변환하여 nc파일로 저장하는 법을 알아보겠습니다. - ERA5 자료 읽기import osimport netCDF4 as ncimport numpy as np"""읽어야 할 파일 이름 얻기제 경우 INPATH 폴더 내에 모든 파일이 ERA5 자료입니다.본인 상황에 따라 이 부분을 수정해주세요."""I..
[ERA5 재분석 자료] 1. API를 활용한 다운로드 (2024년 10월 수정)
·
대기과학/프로그래밍
최근 ECMWF의 API에 관한 업데이트가 있었습니다.이전에 잘 받아지던 분들은 과거에 쓰던 API key 대신 새로운 API key를 써야합니다.또한 url 도 url: https://cds.climate.copernicus.eu/api/v2가 아닌 url: https://cds.climate.copernicus.eu/api를 써야합니다. - 개요대기과학 분야에서 관측을 제외하면 아마 재분석 자료를 가장 많이 쓸겁니다.재분석 자료를 간단하게 설명하자면 적당한 규칙으로 관측 자료와 모델 자료를 등간격 격자 자료로 합친 것입니다. 관측 자료는 지구 모든 곳에 관측소에 있는 것이 아니기 때문에 관측하지 못하는 공간이 있습니다.반대로 모델 자료에서는 모든 지점의 대기 변수 값을 얻을 수 있지만 관측보다 정확하..
[MetPy] Vertical cross section, 연직단면 그리기
·
대기과학/프로그래밍
- 개요기상 자료의 차원은 시간, 연직층, 위도, 경도로 많아야 4개입니다.특정 시간, 특정 층에서 기상 변수의 수평 분포(위도, 경도)는 matplotlib의 contour, contourf만 잘 쓰면 쉽게 그릴 수 있습니다. 하지만 특정 경로에서 대기 변수의 연직 분포를 알고 싶다면 난이도가 많이 올라갑니다.정공법으로 연직단면을 그리려면 먼저 경로를 정하고, 연직층마다 이 경로의 좌표(위도, 경도)에 맞게 interpolation을 하여 각 층에서 경로의 좌표에 따른 변수값을 계산해야 합니다. 이런 코드를 짠다니 생각만 해도 머리가 아픕니다.다행히도 MetPy는 특정 경로의 연직단면을 얻을 수 있는 함수를 제공하고 있습니다. - 자료 읽기이번에는 NCEP2 재분석 자료의 30년 평균 월평균 온도를 사..
[MetPy] 단열선도 그리기
·
대기과학/프로그래밍
- 개요전 대기과학 분야의 그림 중에 단열선도가 직접 그리기 가장 어렵다고 생각합니다.파이썬을 쓰기 전에도 물론 직접 그리진 않고, NCL에서 제공하는 단열선도로 그림을 그렸죠.파이썬을 쓰는 지금은 MetPy 라이브러리로 단열선도를 그리면 됩니다.  이번 포스트에서는 MetPy 라이브러리의 parcel_profile_with_lcl_as_dataset 함수를 이용해서 단열선도를 그려보겠습니다.아래의 예제 코드를 참고했으며, 저는 온도, 이슬점과 관련된 변수만 그릴 것입니다.단열선도 오른 편에 풍향, 풍속도 나타낼 수 있습니다.https://unidata.github.io/MetPy/latest/examples/plots/Sounding_LCL_Dataset.html#sphx-glr-examples-plo..