GEO4962: The General Circulation of the Atmosphere: Analyze and visualize CMIP6 data with python

Map visualization with xarray

Mulai buku catatan Python 3 baru di JupyterHub dan masukkan perintah berikut:

# Paket Python untuk menangani urutan multidimensi yang sederhana dan efisien dengan label impor Xarray as xr impor Panda as pd 

Rangkaian perintah ini menginisialisasi notebook Python 3 dan paket Python (Xarray, panda) yang digunakan dalam plot data model NetCDF.

Anda sekarang dapat membuat peta. Tentukan nama file, buka dataset, hapus kode waktu, dan gunakan fungsi xarray. dataarray. plot () untuk plot TAS (suhu di dekat permukaan (biasanya 2m)):

Tentukan jalur di mana data model CMIP6 disimpan:

jalur = '~/Shared-Tacco-NS1004K-CMIP-BETZY/NCAR/CESM2-CESM2-CESM2-WACCM/HISTORICAL/R1I1P1F1/AMON/TAS/GN/V20190227/'. Nama file = jalur + 'Tas_amon_cesm2-waccm_historical_r1i1p1f1_gn_gn_185001-201412. nc' Pencetakan(Nama file) 
~/Shared-Tacco-NS1004K-CMIP-BETZY/NCAR/CESM2-WACCM/HISTORICAL/R1I1P1F1/AMON/TAS/GN/V20190227/I1P1F1_GN_185001-201412. nc 

Baca file NetCDF ke dalam dataset XArray:

ds = xr.Buka dataset(Nama file) ds 
Dimensi: (Lat: 192, Lon: 288, Waktu: 1980) Koordinat: * float64-90. 0. 0. 0. 0 6-89. 0 6-87. 17. 1850-01-15 12:00:00 : Cesm_cmip6@ucar. edu creation_date: 2019-01-30t22: 37: 15z data_specs_version: 01. 00. 29 Simulasi semua-penganut dari Eksperimen Masa Lalu_id: External_Varibles: AreaCella Forcing_index: 1 Frekuensi: MONFO. MONFO. org/cmip6. ncar. cesm2-w.

Selanjutnya, plot suhu di dekat permukaan tanah. Anda dapat menggunakan fungsi isel () untuk memilih langkah waktu mana (tahun, bulan) untuk plot:

#Plot Langkah pertama kali ds. tas. isel (waktu = 0) . plot () 

Alternatifnya, Anda dapat menggunakan fungsi sel() untuk mengakses rentang waktu yang berbeda untuk setiap label:

# Untuk merencanakan Mei 1929 ds.Tas.sel(waktu='1929-05').merencanakan() 

Customize your maps

Set figure size

Untuk menyesuaikan diagram, Anda dapat menggunakan paket matplotlib.

#impor paket python impor matplotlib as mpl #Sesuaikan ukuran diagram mpl.rcParams['gambar. figsize'] = [10., 8.] ds.Tas.isel(waktu=0).merencanakan() 

Use a scientific color map

Penggunaan peta warna yang tidak ilmiah seperti peta warna pelangi (jet) akan mendistorsi dan menyembunyikan data yang mendasarinya. Beberapa jenis peta warna di matplotlib dapat menghindari masalah ini, seperti peta warna "viridis" default pada plot di atas. Jika Anda ingin mengakses koleksi peta warna ilmiah (dibuat oleh Fabio Crameri di sini di UiO), Anda dapat menggunakan pernyataan berikut di Jupyter Notebook Anda untuk memuat fungsi berikut:

%jalankan shared-tacco-ns1004k/scripts/load_cmap. ipynb 

Klik di sini untuk informasi lebih lanjut tentang peta warna ilmiah dan daftar peta warna yang disertakan.

Fungsi ini sekarang dapat digunakan sebagai argumen peta warna saat membuat plot:

ds.Tas.isel(waktu=0).merencanakan(cmap=peta jalan('batlow')) 

Plot 4D-fields such as Temperature

Tambahkan sel lain di bawah plot dan tampilkan juga suhu ta, bukan suhu dekat permukaan (tas).

# buka file data dan baca datanya jalur = '~/bagikan-tacco-ns1004k-cmip-betzy/NCAR/CESM2-WACCM/historis/r1i1p1f1/Amon/ta/gn/v20190227/' Nama file = jalur + 'ta_Amon_CESM2-WACCM_historical_r1i1p1f1_gn_185001-201412. nc' Pencetakan(Nama file) ds = xr.Buka dataset(Nama file) # Plot langkah waktu pertama pada tingkat tekanan 850hPa ds.ta.isel(waktu=0, merencanakan=2).merencanakan(cmap=peta jalan('batlow')) 

Berbeda dengan tas yang hanya bergantung pada dua dimensi spasial (yaitu lintang dan bujur) dan waktu, ta mempunyai dimensi vertikal tambahan (plev).

What did we plot?

  • Apa perbedaan antara tas dan ta?
  • Jam berapa kamu merencanakannya?
  • Level mana yang Anda rencanakan?
  • Bagaimana cara menampilkan level model terendah?

Sekarang mari tambahkan sel lain di bawah plot untuk menampilkan angin zonal (ua) dan bukan suhu dekat permukaan (tas). Karena ta dan ua mempunyai dimensi tambahan (sepanjang arah vertikal), Anda juga harus menentukan tingkat vertikal (antara 0 dan 18) untuk membuat plot.

# buka file data dan baca datanya jalur = '~/shared-tacco-ns1004k-cmip-betzy/NCAR/CESM2-WACCM/historis/r1i1p1f1/Amon/ua/gn/v20190227/' Nama file = jalur + 'ua_Amon_CESM2-WACCM_historical_r1i1p1f1_gn_185001-201412. nc' Pencetakan(Nama file) ds = xr.Buka dataset(Nama file) # Plot langkah waktu pertama pada tingkat tekanan tertinggi ds.ua.isel(merencanakan=-1,waktu=0).merencanakan(cmap=peta jalan('brok')) 

Change map projection

Anda dapat membuat peta menggunakan paket cartopy Python, atau menganalisis data geografis lainnya. Kami juga menggunakan PyPlot, kumpulan fungsi yang membuat plot lebih mudah.

impor cartopy. crs as CCRS impor matplotlib. pyplot as PLT ara = PLT.angka() ax = PLT.batang(proyeksi=CCRS.cermin()) ds.ua.isel(merencanakan=-1,waktu=0).merencanakan(ax=ax, konversi=CCRS.Piring carry(), cmap=peta jalan('brok') ) ax.Garis pantai() 

Adding lat/lon labels when using projections

Seperti yang dapat Anda lihat dari gambar di atas, mengubah metode naungan peta menghilang label pada poros. Anda dapat menambahkan garis kisi:

ax.Garis kisi() 

Dalam versi lama Cartopy, platecarree dan proyeksi Mercator mendukung label Latitude/ Longitude:

ara = PLT.angka(Figsize=(15,10)) ax = PLT.batang(proyeksi=CCRS.Mercatted()) ds.ua.isel(merencanakan=-1,waktu=0).merencanakan(ax=ax, konversi=CCRS.Piring carry(), cmap=peta jalan('brok') ) ax.Garis pantai() # Tambahkan garis kisi dengan label gl = ax.Garis kisi(warna='Lightgrey', Gaya garis='-', Gambarlah label=BENAR) # Jangan menggambar label di peta dan benar. gl.Xlabels_top = PALSU gl.ylabels_right = PALSU 

Berikut adalah daftar kartretheets yang tersedia.

Plotting your model outputs

  • Gunakan data untuk menghasilkan berbagai variabel, seperti TA dan UA, dan variabel lain, seperti TA dan UA. Kiat: Membaca output model
jalur = '#Jalur Data Anda' Nama file = jalur + '#Ty Anda nama file data' 

Georeferenced Latitude-Vertical plot

2D plot for one longitude point

Gunakan XArray SEL untuk memilih data sesuai dengan bujur 1850-01-31.

ds.ua.sel(Ron=0,waktu="1850-01-31").merencanakan(cmap=peta jalan('brok')) 

2D plot over averaged longitudes

Ali h-alih memilih satu bujur, rat a-rata semua bujur menggunakan fungsi rat a-rata:

ds.ua.sel(waktu="1850-01-31").rata-rata(Redup='Lon').merencanakan(cmap=peta jalan('brok')) 

Adjust vertical axis

Karena nilai tekanan dipegang sebagai koordinat vertikal, jelas bahwa perlu untuk mengembalikan sumbu vertikal, menurunkan nilai, dan menurunkan nilainya:

ds.ua.sel(waktu="1850-01-31").rata-rata(Redup='Lon').merencanakan(cmap=peta jalan('brok')) PLT.ylim(PLT.ylim()[::-1]) 

Pada level tekanan, kami biasanya menggunakan HPA bukan PA.

#Change level tekanan dari PA ke HPA HPA=ds.ua.merencanakan/100 ds['Plev']=HPA ds.ua.merencanakan.satuan['satuan] = 'HPA ds.ua.merencanakan.satuan['Nama standar] = 'Air_pressure' ds.ua.merencanakan #merencanakan ds.ua.sel(waktu="1850-01-31").rata-rata(Redup='Lon').merencanakan(cmap=peta jalan('brok')) PLT.ylim(PLT.ylim()[::-1]) 

Bagian atas gambar juga dapat disesuaikan. Jika sumbu vertikal berada pada tingkat tekanan, ia dapat diplot menggunakan logaritma sehingga dapat dilihat secara lebih intuitif.

ds.ua.sel(waktu="1850-01-31").rata-rata(Redup='Lon').merencanakan(cmap=peta jalan('brok')) PLT.ylim(PLT.ylim()[::-1]) PLT.ylim(atas=0, 001) PLT.skala(log) 

Georeferenced Latitude-Vertical plot with CMIP6 model data

  • Gunakan data model yang dipilih untuk membuat plot lintang dan bujur di U dan T.
jalur = '#-Model-Data-path' Nama file = jalur + '#File data-model Anda'