标签: python-xarray

Xarray 如何绘制条形图?

如何从 Python Xarray 数据集(例如雨量数据轴)绘制条形图?

\n\n

我已经在使用此代码来调整绘图大小

\n\n
fig, ax = plt.subplots(figsize=(9, 9)) #redimensionamento do gr\xc3\xa1fico\ndsfanadia.rain.plot(ax=ax)\n
Run Code Online (Sandbox Code Playgroud)\n

python plot python-xarray

3
推荐指数
1
解决办法
2185
查看次数

将一系列 xarray.DataArray 转换为 numpy 数组

在此输入图像描述在此输入图像描述我正在使用一个名为 PySD 的包进行系统动力学建模。PySD 将模型从 Vensim(系统动力学建模包)转换为 Python,并允许用户用比 Vensim 更复杂的例程替换各种方程。我正在运行一个具有各种下标的模型,这会创建一种不寻常的输出格式。输出被读入数据帧,其下标元素的各个值最终为 xarray.DataArrays。我想知道如何获取 xarray.DataArrays 的列(最终成为一个系列)并将其转换为二维数组,第二个维度是下标的数量。

import pysd
import numpy as np

model=pysd.load("Example.py")
stocks=model.run
pop=np.array(Population) #Creates an object array
Population=stocks.Populaton #Creates a series

#How to get an array of population values for each country?
Run Code Online (Sandbox Code Playgroud)

example.py代码如下(请记住这是一个任意示例来说明问题)

from __future__ import division
import numpy as np
from pysd import utils
import xarray as xr

from pysd.functions import cache
from pysd import functions

_subscript_dict = {
    'Country': ['Canada', 'USA', 'China', 'Norway', 'India', 'England', 
'Mexico', 'Yemen']
}

_namespace = { …
Run Code Online (Sandbox Code Playgroud)

python numpy systemdynamics python-xarray

3
推荐指数
1
解决办法
1万
查看次数

删除 Xarray 子图中的共享颜色条

我正在尝试通过使用 Xarrays 的高级绘图功能制作共享颜色条来微调我的子图。目前我的情节看起来在此处输入图片说明我想制作一个通用的颜色条并修复 yaxis,以便只有第一个子图 y 轴有刻度和标签。我用来绘制它的代码如下所示:

fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True, figsize=(14,10))
Var1_monthly_clim_N.plot(ax=ax1,vmin=6, vmax=14, cmap='jet');

Var2_monthly_clim_S.plot(ax=ax2, vmin=6, vmax=14, cmap='jet', yticks=[]);
## why is yticks removing ticks from both axis
## Var1 and Var 2 have similiar dimensions
Var1
>><xarray.DataArray 'R_metric' (month: 12, lat: 1, lon: 720)>
array([[[ 9.899495,  9.942897, ...,  9.814826,  9.856807]],

   [[ 9.578215,  9.610594, ...,  9.514423,  9.546191]],

   ...,

   [[11.974784, 12.019565, ..., 11.886591, 11.930419]],

   [[10.237672, 10.285891, ..., 10.142638, 10.189836]]])
Coordinates:
* lon      (lon) float32 -180.0 -179.5 -179.0 -178.5 …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib python-xarray

3
推荐指数
1
解决办法
3532
查看次数

使用 xarray 将单个每月 NetCDF 文件拆分为每日平均的 NetCDF 多个文件

我有 1 个 2007 年 9 月的 NetCDF 文件。它包含某些纬度/经度的 6 小时数据以及风和湿度变量。每个变量的形状为(120, 45, 93):120 次(每天 4 次),45 个纬度和 93 个经度。使用以下代码,我可以获得所有变量的每日平均数据。现在,每个变量的形状都是(30, 45, 93)。时间是一个整数,单位为'hours since 1900-01-01 00:00:00.0'

从这个每日平均数据中,如何将每天分成 30 个不同的 NetCDF 文件,文件名包含YYYY:MM:DD时间格式?

import xarray as xr
monthly_data = xr.open_dataset('interim_2007-09-01to2007-09-31.nc') 
daily_data = monthly_data.resample(time='1D').mean()
Run Code Online (Sandbox Code Playgroud)

python python-xarray netcdf4

3
推荐指数
1
解决办法
1606
查看次数

xarray:沿一个坐标反转数组

对于我的数据数组,我有坐标经度、纬度和时间。我只想沿纬度反转数组,以便[90, 85, ..., -85, -90]变为[-90, -80, ..., 85, 90].

python-xarray

3
推荐指数
2
解决办法
2842
查看次数

将 numpy 数据集转换为 netCDF

我在 python 中有一个 numpy 数组,大小 (16,250,186) 表示时间、纬度和经度。

我想将其转换为 netCDF 文件,以便将来可以使用坐标轻松读取数据。

我的 numpy 数组看起来像这样

RZS = np.load("/home/chandra/Data/rootzone_CHIRPS_era5_2003-2015_daily-analysis_annual-result.npy")
RZS.shape

Output: (16, 250, 186)
Run Code Online (Sandbox Code Playgroud)

如您所见,我上面的 numpy 数组表示 16 年的年度值。

chirps_precip =xarray.open_mfdataset("/home/chandra/Data/CHIRPS/chirps-v2.0.2000.days_p25.nc")
precip = chirps_precip.precip.sel(latitude = slice(-50,12.5), longitude = slice(-81.25,-34.75))
precip[0,:,:]

Output:
<xarray.DataArray 'precip' (latitude: 250, longitude: 186)>
dask.array<shape=(250, 186), dtype=float32, chunksize=(250, 186)>
Coordinates:
  * latitude   (latitude) float32 -49.875 -49.625 -49.375 ... 12.125 12.375
  * longitude  (longitude) float32 -81.125 -80.875 -80.625 ... -35.125 -34.875
    time       datetime64[ns] 2000-01-01
Attributes:
    units:               mm/day
    standard_name:       convective precipitation rate …
Run Code Online (Sandbox Code Playgroud)

dataset python-3.x python-xarray netcdf4

3
推荐指数
1
解决办法
3517
查看次数

迭代 xarray。DataArray 第一维及其坐标

假设我有以下内容 DataArray

arr = xarrray.DataArray(np.arange(6).reshape(2,3),
                        dims=['A', 'B'],
                        coords=dict(A=['a0', 'a1'], 
                                    B=['b0', 'b1', 'b2']))
Run Code Online (Sandbox Code Playgroud)

我想迭代第一个维度并执行以下操作(当然我想做比打印更复杂的事情)

for coor in arr.A.values:
    print(coor, arr.sel(A=coor).values)
Run Code Online (Sandbox Code Playgroud)

并得到

a0 [0 1 2]
a1 [3 4 5]
Run Code Online (Sandbox Code Playgroud)

我是新手xarray,所以我想知道是否有一些更自然的方法来实现这一点,比如

for coor, sub_arr in arr.some_method():
    print(coor, sub_arr)
Run Code Online (Sandbox Code Playgroud)

python python-xarray

3
推荐指数
2
解决办法
2935
查看次数

在xarray中交换纬度和经度位置

我有一个交换纬度和经度位置的 NetCDF 文件。

我通常使用的 Netcdf 的标准方式定义如下:

<xarray.DataArray 'pev' (time: 365, latitude: 480, longitude: 1440)>
Coordinates:
  * time       (time) datetime64[ns] 2001-01-01T11:30:00 ... 2001-12-31T11:30:00
  * longitude  (longitude) float32 0.0 0.25 0.5 0.75 ... 359.25 359.5 359.75
  * latitude   (latitude) float32 59.75 59.5 59.25 59.0 ... -59.5 -59.75 -60.0
Run Code Online (Sandbox Code Playgroud)

但是我正在处理的 NetCDF 的规格如下:

<xarray.DataArray 'ETa' (time: 12, longitude: 720, latitude: 360)>
Coordinates:
  * latitude   (latitude) float64 89.75 89.25 88.75 ... -88.75 -89.25 -89.75
  * longitude  (longitude) float64 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8 …
Run Code Online (Sandbox Code Playgroud)

coordinates python-xarray

3
推荐指数
1
解决办法
448
查看次数

如何在 NetCDF 上应用 xarray u_function 并将二维数组(多个新变量)返回到数据集

我正在尝试使用 xarray 在数据集中的所有坐标对(即像素)apply_ufunc上应用给定函数f

该函数f返回一个二维数组(NxN 矩阵)作为结果。因此,分析后得到的 Dataset 会有几个新变量:总共是M新变量。

该功能f确实工作得很好。所以,错误似乎不是来自它。

一个可能的问题可能是 2D 数组从 返回的结构f。据我了解,xarray.apply_ufunc要求结果数组以元组结构。所以,我什至尝试将二维数组转换为数组元组,但到目前为止没有任何效果。

这种情况可以在其他地方的其他作品被选中的作品也是如此。在本链接中,作者必须在原始数据集上运行两次相同的线性回归拟合函数,以便从回归中检索所有参数(beta_0 和 alpha)。

因此,我想知道,是否xarray.apply_ufunc能够像上面的链接(或下面的代码片段)中那样操作归约函数,该函数返回多个新变量。

下面我展示了一个涉及所讨论问题的可重现代码。请注意,该函数f返回一个二维数组。第二维的深度是4。因此,我希望在整个处理后得到一个带有4个新变量的结果数据集。

import numpy as np
import xarray as xr


x_size = 10
y_size = 10
time_size = 30

lon = np.arange(50, 50+x_size)
lat = np.arange(10, 10+y_size)
time = np.arange(10, 10+time_size)

array = np.random.randn(y_size, x_size, time_size)

ds = xr.DataArray(
    data=array, 
    coords = {'lon':lon, 'lat':lat, 'time':time}, …
Run Code Online (Sandbox Code Playgroud)

python netcdf python-xarray

3
推荐指数
1
解决办法
724
查看次数

使用 cartopy 绘制来自 netcdf 的数据不是在 0 经度绘制数据

我开始用网格数据开始我的旅程,我一直在尝试从带有 cartopy 的 netcdf 文件中绘制一些温度数据。我遵循了一些例子,我不明白为什么我的情节在中间有一条白线。(我已经检查了数据,矩阵中充满了数字,没有 NaN)

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np
import xarray as xr
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatterimport glob


data = xr.open_dataset('aux1.nc')
lat = data.lat
lon = data.lon
time = data.time
Temp = data.air


#Calculo la temperatura media anual
Tanual = Temp.resample(time="y").mean()
#Promedio de todos los meses
Tprom = Temp.mean(dim="time").values


#Grafico
fig = plt.figure(figsize=(10, 4))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.coastlines()
ax.set_global()
ct = ax.contourf(lon,lat,Tprom,transform=ccrs.PlateCarree(),cmap="bwr")
ax.gridlines()
cb = plt.colorbar(ct,orientation="vertical",extendrect='True')
cb.set_label("Temperatura …
Run Code Online (Sandbox Code Playgroud)

python netcdf cartopy python-xarray

3
推荐指数
1
解决办法
968
查看次数