标签: xarray

避免在xarray facet网格图中重叠colorbar

   import xarray as xr     
   import cartopy.crs as ccrs


    USA_PROJ = ccrs.AlbersEqualArea(central_longitude=-97., central_latitude=38.)
    g_simple = ds_by_month.t2m.plot(x='longitude',
                                    y='latitude',
                                    col='month',
                                    col_wrap=6,
                                    aspect=ds.dims['longitude'] / ds.dims['latitude'],
                                    subplot_kws=dict(projection=USA_PROJ),
                                    add_colorbar=False,
                                    transform=ccrs.PlateCarree())
    g_simple.add_colorbar(orientation='horizontal')
    for ax in g_simple.axes.ravel():
        ax.coastlines()
        ax.set_extent([-121, -72, 22.5, 50])

    plt.tight_layout()
    plt.show()
Run Code Online (Sandbox Code Playgroud)

在运行上面的代码时,我得到了foll.数字: 在此输入图像描述

如何确保颜色条与图形重叠?即使我使用xarray默认颜色条,也会发生重叠.

python xarray

10
推荐指数
1
解决办法
483
查看次数

何时在熊猫中使用多索引与xarray

大熊猫透视表的文件似乎建议更换使用multiindexing数据超过两个维度进行处理:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: import pandas.util.testing as tm; tm.N = 3

In [4]: def unpivot(frame):
   ...:         N, K = frame.shape
   ...:         data = {'value' : frame.values.ravel('F'),
   ...:                 'variable' : np.asarray(frame.columns).repeat(N),
   ...:                 'date' : np.tile(np.asarray(frame.index), K)}
   ...:         return pd.DataFrame(data, columns=['date', 'variable', 'value'])
   ...: 

In [5]: df = unpivot(tm.makeTimeDataFrame())

In [6]: df
Out[6]: 
         date variable     value    value2
0  2000-01-03        A  0.462461  0.924921
1  2000-01-04        A -0.517911 -1.035823
2  2000-01-05 …
Run Code Online (Sandbox Code Playgroud)

python multi-index data-structures pandas xarray

9
推荐指数
1
解决办法
2838
查看次数

从netcdf文件获取每月的每小时平均值

我有一个netCDF文件,其时间维度包含2小时的数据.我希望平均每小时获得每小时的平均时数.我试过这个:

import xarray as xr
ds = xr.open_mfdataset('ecmwf_usa_2015.nc')    
ds.groupby(['time.month', 'time.hour']).mean('time')
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

*** TypeError: `group` must be an xarray.DataArray or the name of an xarray variable or dimension
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?如果我这样做:

ds.groupby('time.month', 'time.hour').mean('time')
Run Code Online (Sandbox Code Playgroud)

我没有得到错误,但结果的时间维度为12(每个月一个值),而我想要每个月的小时平均值,即每12个月24个值.数据可在此处获取:https://www.dropbox.com/s/yqgg80wn8bjdksy/ecmwf_usa_2015.nc?dl = 0

python netcdf xarray

9
推荐指数
3
解决办法
935
查看次数

Xarray:没有维度的切片坐标

我在这个话题上遇到了困难,尽管它看起来应该很简单。

我想使用一组纬度和经度坐标对 xarray 数据集进行切片。

这是我的数据集的样子:

In [31]: data = xr.open_mfdataset(open_file, decode_cf=True)

In [32]: data
Out[32]: 
<xarray.Dataset>
Dimensions:  (time: 108120, x: 349, y: 277)
Coordinates:
    lons     (y, x) float64 -145.5 -145.3 -145.1 -144.9 -144.8 -144.6 -144.4 ...
    lats     (y, x) float64 1.0 1.104 1.208 1.312 1.416 1.519 1.621 1.724 ...
  * time     (time) datetime64[ns] 1980-01-01 1980-01-01T03:00:00 ...
Dimensions without coordinates: x, y
Data variables:
    stp      (time, y, x) float64 0.1235 0.0867 0.07183 0.05389 0.05901 ...
Run Code Online (Sandbox Code Playgroud)

这是我如何切片:

In [48]: lat_bnd = [25,30] …
Run Code Online (Sandbox Code Playgroud)

python xarray

8
推荐指数
1
解决办法
2819
查看次数

如何将 xarray 数据集展平为一维 numpy 数组?

是否有一种简单的方法可以将 xarray 数据集展平为单个 1D numpy 数组?

例如,展平以下测试数据集:

xr.Dataset({
    'a' : xr.DataArray(
                   data=[10,11,12,13,14],
                   coords={'x':[0,1,2,3,4]},
                   dims={'x':5}
          ),
    'b' : xr.DataArray(data=1,coords={'y':0}),
    'c' : xr.DataArray(data=2,coords={'y':0}),
    'd' : xr.DataArray(data=3,coords={'y':0})
})
Run Code Online (Sandbox Code Playgroud)

[10,11,12,13,14,1,2,3]
Run Code Online (Sandbox Code Playgroud)

?

python python-xarray xarray

7
推荐指数
2
解决办法
3252
查看次数

xarray或dask真的支持内存映射吗?

到目前为止,我已经尝试过:

  • xr.open_dataset使用chunksarg,它将数据加载到内存中。
  • 设置一个NetCDF4DataStore,然后调用ds['field'].values,它将数据加载到内存中。
  • 建立一个ScipyDataStoremmap='r'ds['field'].values数据加载到内存中。

从我所看到的情况来看,该设计似乎不围绕在内存映射的数组上实际应用numpy函数,而是将小块加载到内存中(有时使用内存映射来实现)。例如,此注释。而有些相关评论点击这里了解不xarray不能够确定一个numpy的阵列是否mmapped与否。

我希望能够将数据表示和切片为xarray.Dataset,并能够调用.values(或.data)以获取ndarray,但仍将其映射(为共享内存等目的)。

如果分块的dask操作至少可以在内存映射的数组上运行,直到它实际上需要进行某些更改,这也是很好的,因为dask似乎是围绕不可变数组设计的,因此这似乎是可能的。

我确实找到了xarray的窍门,就是这样做的:

data=np.load('file.npy', mmap_mode='r')
ds=xr.Dataset({'foo': (['dim1', 'dim2'], data)})
Run Code Online (Sandbox Code Playgroud)

在这一点上,类似以下内容的工作无需将任何内容加载到内存中:

np.sum(ds['foo'].values)
np.sum(ds['foo'][::2,:].values)
Run Code Online (Sandbox Code Playgroud)

... xarray显然不知道该数组是否被映射,因此无法承受np.copy此类情况。

是否存在“受支持的”方式在xarray或dask中进行只读映射(或对此事进行复制复制)?

numpy dask numpy-memmap xarray

5
推荐指数
1
解决办法
935
查看次数

python-xarray:如何将多个波段和日期的单个波段栅格数据转换为 xarray-Dataset 或 DataArray?

我想获取栅格(卫星图像)数据,并构建一个DatasetorDataArray来加速我的图像处理(我必须经常处理多波段、多日期的卫星图像)。

数据是每个图像日期的单独波段,我了解如何将每个波段日期转换为 xarray- DataArray。我认为每个波段都有一个变量是最有意义的,并且在每个波段内都有空间 (x, y) 和时间维度。

但是,我无法弄清楚如何做到这一点。

我一直在与一些虚拟乐队合作试图解决这个问题,因此将包括在内以澄清我的数据是什么样子以及我正在尝试做什么。

# Set up dummy 3 x 3 array
dA = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Create 4 dummy images; 2 bands for each of 2 dates (using bands 4 and 5,
# because they're useful for vegetation measures)
d1_b4 = xr.DataArray((dA + 140),
    coords={'x': ['1', '2', '3'], 'y': ['a', 'b', 'c']}, dims=('x', 'y'))
d1_b5 = xr.DataArray((dA + 150),
    coords={'x': ['1', '2', …
Run Code Online (Sandbox Code Playgroud)

python raster satellite-image rasterio xarray

5
推荐指数
1
解决办法
1269
查看次数

如何替换 xarray 变量中的值?

我有一个 xarray 数据集 ds

<xarray.Dataset>
Dimensions:         (elevation_band: 4, latitude: 1, longitude: 1)
Coordinates:
  * longitude       (longitude) float64 -111.4
  * latitude        (latitude) float64 44.51
  * elevation_band  (elevation_band) int32 1 2 3 4
Data variables:
    area_frac       (elevation_band, latitude, longitude) float64 0.005109 ...
    mean_elev       (elevation_band, latitude, longitude) float64 2.45e+03 ...
    prec_frac       (elevation_band, latitude, longitude) float64 0.005109 ...
Run Code Online (Sandbox Code Playgroud)

我想mean_elev[0.1, 0.2, 0.3, 0.4]导致此错误的这些值替换 的值:

试验 1

ds['mean_elev'].values = np.atleast_3d([0.1, 0.5, 0.3, 0.6]).reshape((4, 1, 1))
Run Code Online (Sandbox Code Playgroud)

错误 2

MissingDimensionsError: cannot set variable 'mean_elev' …

python numpy pandas python-xarray xarray

5
推荐指数
1
解决办法
8931
查看次数

使用带有超过2263年的时间戳的xarray创建netcdf

有没有办法使用xarray创建时间维度超过2263年的netCDF文件?

以下是如何创建netCDF玩具数据集http://xarray.pydata.org/en/stable/time-series.html

但是,时间维度有一种pandas日期时间索引,并且不会超出2263,如下所示:https: //github.com/pandas-dev/pandas/issues/13346

python netcdf xarray

5
推荐指数
1
解决办法
542
查看次数

在python中使用xarray获取每月气候学

我有一个netCDF文件,其中包含一个名为var2001-01-01到2010-12-31 的变量的每日数据.我想计算每月总和,var得到一个包含12个时间步长的netCDF(一年中每个月一个).目前,我这样做:

import xarray as xr
hndl_fl = xr.open_dataset(path_file)

hndl_fl.resample('1MS', dim='time', how='sum')
Run Code Online (Sandbox Code Playgroud)

然而,这导致netCDF每月从2001年到2010年的每月总和.我如何获得12个月的月平均值?

python xarray

4
推荐指数
2
解决办法
1157
查看次数