GMTDataArrayAccessor¶
pygmt.GMTDataArrayAccessor(xarray_obj)
Accesseur GMT pour xarray.DataArray.
L’accesseur s’étend xarray.DataArray pour stocker les propriétés spécifiques à GMT sur les grilles, qui sont importantes pour que PyGMT traite et trace correctement les grilles.
Remarques
En raison des limitations des accesseurs xarray, les accesseurs GMT sont créés une fois par xarray.DataArray instance. Vous risquez de perdre ces propriétés spécifiques à GMT lors de la manipulation de grilles (par exemple, opérations arithmétiques et tranches) ou lors de l’accès à a xarray.DataArray depuis un xarray.Dataset . Dans ces cas, vous devez définir manuellement ces propriétés avant de transmettre la grille à PyGMT.
Exemples
Pour les ensembles de données distants intégrés de GMT, ces propriétés spécifiques à GMT sont automatiquement déterminées et vous pouvez y accéder comme suit :
from pygmt.datasets import load_earth_relief
# Use the global Earth relief grid with 1 degree spacing
grid = load_earth_relief(resolution="01d", registration="pixel")
# See if grid uses Gridline (0) or Pixel (1) registration
grid.gmt.registration
1
# See if grid uses Cartesian (0) or Geographic (1) coordinate system
grid.gmt.gtype
1
Pour xarray.DataArray les grilles créées par vous-même, les propriétés de la grille registration et gtype la valeur par défaut sont 0 (c’est-à-dire une grille cartésienne enregistrée sur la grille). Vous devez définir les propriétés correctes avant de le transmettre aux fonctions PyGMT :
import numpy as np
import pygmt
import xarray as xr
# create a DataArray in gridline coordinates of sin(lon) * cos(lat)
interval = 2.5
lat = np.arange(90, -90 - interval, -interval)
lon = np.arange(0, 360 + interval, interval)
longrid, latgrid = np.meshgrid(lon, lat)
data = np.sin(np.deg2rad(longrid)) * np.cos(np.deg2rad(latgrid))
grid = xr.DataArray(
data, coords=[("latitude", lat), ("longitude", lon)]
)
# default to a gridline-registrated Cartesian grid
grid.gmt.registration, grid.gmt.gtype
(0, 0)
# set it to a gridline-registered geographic grid
grid.gmt.registration = 0
grid.gmt.gtype = 1
grid.gmt.registration, grid.gmt.gtype
(0, 1)
Notez que les accesseurs sont créés une fois par xarray.DataArray instance, vous risquez donc de perdre ces propriétés spécifiques à GMT après avoir manipulé votre grille.
Les opérateurs d’affectation sur place comme *= ne créent pas de nouvelles instances, donc les propriétés sont toujours conservées :
grid \*= 2.0
grid.gmt.registration, grid.gmt.gtype
(0, 1)
D’autres opérations de grille (par exemple, des opérations arithmétiques ou de découpage) créent de nouvelles instances, de sorte que les propriétés seront perdues :
# grid2 is a slice of the original grid
grid2 = grid[0:30, 50:80]
# properties are reset to the default values for new instance
grid2.gmt.registration, grid2.gmt.gtype
(0, 0)
# need to set these properties before passing the grid to PyGMT
grid2.gmt.registration = grid.gmt.registration
grid2.gmt.gtype = grid.gmt.gtype
grid2.gmt.registration, grid2.gmt.gtype
(0, 1)
L’accès à a xarray.DataArray depuis a xarray.Dataset crée toujours de nouvelles instances, donc ces propriétés sont toujours perdues. La solution consiste à affecter le xarray.DataArray dans une variable :
ds = xr.Dataset({"zval": grid})
ds.zval.gmt.registration, ds.zval.gmt.gtype
(0, 0)
# manually set these properties won't work as expected
ds.zval.gmt.registration, ds.zval.gmt.gtype = 0, 1
ds.zval.gmt.registration, ds.zval.gmt.gtype
(0, 0)
# workaround: assign the DataArray into a variable
zval = ds.zval
zval.gmt.registration, zval.gmt.gtype
(0, 0)
zval.gmt.registration, zval.gmt.gtype = 0, 1
zval.gmt.registration, zval.gmt.gtype
(0, 1)
Les attributs¶
propriétéGMTDataArrayAccessor. gtype
Type de système de coordonnées de la grille, soit 0 (cartésien) ou 1 (géographique).
propriétéGMTDataArrayAccessor. inscription
Type d’enregistrement de la grille, soit 0 (Gridline) ou 1 (Pixel).