成人免费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英國氣象局

2021-03-18 08:11:18

PythonDash工具

2024-12-30 07:40:58

Python編程循環結構

2018-05-31 21:33:05

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

2011-07-01 10:03:52

QT 數據庫

2013-04-01 11:17:43

Foursquare

2009-07-24 17:08:31

添加站點地圖asp.net

2016-08-29 19:54:07

Javascript谷歌地圖API

2014-03-19 09:41:47

2014-03-19 09:40:32

2018-05-31 14:42:01

高德地圖AI道路積水

2014-05-27 10:37:31

阿里云大數據

2019-03-10 12:15:57

遷移云計算數據分析

2019-09-02 15:12:46

Python 開發數據分析

2013-06-06 09:15:43

大數據

2017-09-19 22:23:12

KubernetesDocker

2009-11-13 14:46:21

ADO.NET Dat

2014-03-19 15:10:43

2020-12-24 13:32:31

大數據數據分析SQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区在线免费 | 欧美综合一区 | 亚洲精品久久久久久国产精华液 | 欧美日韩国产欧美 | 日韩精品在线观看一区二区三区 | 一区二区三区四区日韩 | 亚洲综合大片69999 | 亚洲精品小视频在线观看 | 日韩理论电影在线观看 | 国产一区二区在线观看视频 | 欧美在线一区二区三区 | 日韩久久综合 | 亚洲日本免费 | 最新日韩av | 91新视频 | 国产欧美精品一区二区三区 | 久久精品亚洲精品国产欧美 | 在线观看中文字幕一区二区 | 欧美日韩电影免费观看 | 日韩精品一区二区在线 | 国内精品免费久久久久软件老师 | 91一区| 91极品欧美视频 | 在线国产视频观看 | 日韩欧美在线播放 | 看片91| 玖玖视频| 中国一级大黄大片 | 第四色影音先锋 | 黄网站在线播放 | 男女网站在线观看 | 国产一级久久久久 | 国产一区二区在线免费 | 国产欧美日韩一区 | 成人欧美一区二区三区黑人孕妇 | 日韩精品视频在线 | 色综合久 | 欧美日韩精品影院 | av影音资源 | 黄色大片网 | 日日天天 |