成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分析氣象數據,向Python Cartopy地圖中添加循環點

開發 前端
本文介紹了cartopy中不常見的函數add_cyclic_point。在繪制地理空間數據時,你可能會遇到這樣的白線,希望本文能幫助你解決問題。

在使用Python和Cartopy對氣候數據進行可視化分析的過程中,有一個叫做循環點(cyclic point)的術語,它在地理空間柵格數據可視化領域中很重要。

圖片

什么是循環點,它有什么用?

有時,當我們試圖繪制地理空間數據時,我們可能會在投影邊緣遇到不連續(跳躍)。這通常是由于我們在地理空間數據集中存儲經度數據的方式導致的。

假設我們有一組具有經度和緯度維度的數據。我們的經度從0°到359.9°(含),分辨率為0.1°(3600個值),緯度從-90°到90°(含),分辨率為0.1°(1801個值)。我們最終的數組形狀為(1801, 3600)。

為什么我們的數據集不包含360度經度的值?答案很簡單,因為360°經度與 0°經度相同。

現在,讓我們嘗試在cartopy地圖上繪制數據。我們使用了可以從Climate Data Store下載的數據集,這是一個ERA5-Land從1950年到現在的月平均數據數據集。我們將使用帶有cfgrib后端的xarray以grib格式加載此數據集,然后使用matplotlib可視化數據。

import xarray as xr 
import cartopy.crs as ccrs 
import matplotlib.pyplot as plt 
import numpy as np

# 讀取形狀為(16, 1801, 3600)的數據集
# 選擇第5個時間索引,以獲得2D數組
# 將開爾文轉換為攝氏度
ds = xr.open_dataset("data/era5_temperature.grib", engine="cfgrib")
ds = ds.isel(time=5) - 273.15

# 定義繪圖函數
def plot_data(ds):
    # 指定投影
    proj = ccrs.PlateCarree()

    # 用投影對象創建一個圖和軸
    fig, ax = plt.subplots(figsize=(16,9), subplot_kw={'projection': proj})

    # 為等高線圖創建層次
    temperature_levels = np.arange(-40,41,2)

    # 增加更多的參數
    additional_kwargs = {
        "antialised": True,
        "transform": proj,
        "levels": temperature_levels
    }

    # 繪制數據
    ds["t2m"].plot.contourf(ax=ax, cmap='nipy_spectral', **additional_kwargs)

    # 設置范圍
    ax.set_extent([-10, 20, 40, 60], crs=proj)

    plt.show()

plot_data(ds)

圖片

請注意從頂部跨越到底部的白線恰好在0°經度處,這就是我們要討論的問題。

向數據添加循環點

幸運的是,Cartopy有一個功能可以讓我們解決這個問題。該函數稱為add_cyclic_point,可以從cartopy.util模塊導入。

此函數采用數據數組和可選坐標,并返回循環數據和循環坐標。這意味著我們將增加一個等于360的經度坐標,數據等于經度359.9°。讓我們用數據本身來證明這一點。

首先,我們將循環點添加到我們的數據中,然后比較經度359.9°和經度 360°處的值。

from cartopy.util import add_cyclic_point
import xarray as xr 
import cartopy.crs as ccrs 
import matplotlib.pyplot as plt 
import numpy as np

def add_cyclic_point_to_dataset(ds):
    # 加載數據
    data = ds["t2m"]

    # 用循環點生成數據,用循環點生成經度
    cyclic_data, cyclic_longitude = add_cyclic_point(data.values, coord=data['longitude'])

    # 創建新的坐標,將用于創建新的數據集
    # 復制現有數據集的坐標,用循環經度替換經度
    coords = {dim: data.coords[dim] for dim in data.dims}
    coords["longitude"] = cyclic_longitude

    new_ds = xr.Dataset(
        data_vars={
            "t2m": xr.DataArray(cyclic_data, dims=data.dims, coords=coords)
        })
    return new_ds 

new_ds = add_cyclic_point_to_dataset(ds)
new_ds["t2m"].shape
# (1801, 3601)

difference = ds["t2m"].sel(lnotallow=0, method="nearest") - new_ds["t2m"].sel(lnotallow=360, method="nearest")
difference = difference.fillna(0)  # fill nan values with 0
any(difference != 0)
# False

讓我們重用plot_data()函數并將其命名為plot_data(new_ds)。當我們繪制使用循環點擴展的數據時,我們可以看到白線消失了,我們的繪圖現在是正確的。

圖片

本文介紹了cartopy中不常見的函數add_cyclic_point。在繪制地理空間數據時,你可能會遇到這樣的白線,希望本文能幫助你解決問題。

責任編輯:武曉燕 來源: Python學研大本營
相關推薦

2015-04-27 09:40:56

谷歌Android

2018-05-17 14:21:09

IBMLinuxONE英國氣象局

2024-12-30 07:40:58

Python編程循環結構

2021-03-18 08:11:18

PythonDash工具

2018-05-31 21:33:05

高德地圖道路積水地圖AI版

2013-04-01 11:17:43

Foursquare

2011-07-01 10:03:52

QT 數據庫

2009-07-24 17:08:31

添加站點地圖asp.net

2014-03-19 09:40:32

2016-08-29 19:54:07

Javascript谷歌地圖API

2014-03-19 09:41:47

2018-05-31 14:42:01

高德地圖AI道路積水

2014-05-27 10:37:31

阿里云大數據

2019-09-02 15:12:46

Python 開發數據分析

2019-03-10 12:15:57

遷移云計算數據分析

2009-11-13 14:46:21

ADO.NET Dat

2014-03-19 15:10:43

2017-09-19 22:23:12

KubernetesDocker

2013-06-06 09:15:43

大數據

2021-08-03 14:31:11

大數據氣象科技
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频一二三区 | 免费成人在线网 | 欧美在线日韩 | 中文字幕亚洲视频 | 99精品99久久久久久宅男 | 午夜精品在线观看 | 91精品国产91久久久 | 久草视频观看 | 91精品国产乱码久久久久久久 | 精品免费国产一区二区三区四区 | 亚洲一区二区中文字幕 | 日韩免费高清视频 | 精品国产网 | 国产成人亚洲精品 | 国产精品日韩一区二区 | 伊人色综合久久久天天蜜桃 | 日韩一区二区三区在线观看 | 亚洲一区av | 91视频麻豆| 精品久久av| 大乳boobs巨大吃奶挤奶 | 成人在线免费 | 久久在线视频 | 国产免费一区二区 | 久久久夜色精品亚洲 | 欧美精品综合 | 人人爽人人爽人人片av | 精品一二区 | 色影视| 天堂素人约啪 | 精品欧美激情在线观看 | 久久精品中文字幕 | 亚洲视频国产 | 国产精品福利网站 | 91大片| 91毛片在线看 | 一级黄色片网站 | 欧美一区视频 | 久久99一区二区 | 亚洲视频一区二区三区 | k8久久久一区二区三区 |