Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用xarray和matplotlib绘制年度总和图_Python_Python Xarray - Fatal编程技术网

Python 使用xarray和matplotlib绘制年度总和图

Python 使用xarray和matplotlib绘制年度总和图,python,python-xarray,Python,Python Xarray,我有一个xarray数据集,其中包含爱尔兰一年的每月二氧化碳排放数据,如下所示: <xarray.Dataset> Dimensions: (lat: 733, lon: 720, time: 12) Coordinates: * lat (lat) float32 49.9 49.9083 49.9167 49.925 49.9333 49.9417 49.95 ... * lon (lon) float32 -11.0 -10.9917 -10.98

我有一个xarray数据集,其中包含爱尔兰一年的每月二氧化碳排放数据,如下所示:

<xarray.Dataset>
Dimensions:  (lat: 733, lon: 720, time: 12)
Coordinates:
  * lat      (lat) float32 49.9 49.9083 49.9167 49.925 49.9333 49.9417 49.95 ...
  * lon      (lon) float32 -11.0 -10.9917 -10.9833 -10.975 -10.9667 -10.9583 ...
  * time     (time) int16 181 182 183 184 185 186 187 188 189 190 191 192
Data variables:
soc      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
ch4      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
co2      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
n2o      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
no3      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...

尺寸:(纬度:733,经度:720,时间:12)
协调:
*lat浮动32 49.9 49.9083 49.9167 49.925 49.9333 49.9417 49.95。。。
*lon(lon)float32-11.0-10.9917-10.9833-10.975-10.9667-10.9583。。。
*时间(时间)int16 181 182 183 184 185 186 187 188 189 190 191 192
数据变量:
soc(纬度、经度、时间)浮动64楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠。。。
ch4(纬度、经度、时间)浮动64楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠。。。
二氧化碳(纬度、经度、时间)漂浮64楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠。。。
n2o(纬度、经度、时间)浮动64楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠。。。
三号(纬度、经度、时间)浮动64楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠。。。
如果我绘制一个月的数据,它如下所示:

<xarray.Dataset>
Dimensions:  (lat: 733, lon: 720, time: 12)
Coordinates:
  * lat      (lat) float32 49.9 49.9083 49.9167 49.925 49.9333 49.9417 49.95 ...
  * lon      (lon) float32 -11.0 -10.9917 -10.9833 -10.975 -10.9667 -10.9583 ...
  * time     (time) int16 181 182 183 184 185 186 187 188 189 190 191 192
Data variables:
soc      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
ch4      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
co2      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
n2o      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...
no3      (lat, lon, time) float64 nan nan nan nan nan nan nan nan nan ...

我想对每个月每个lat/lon组合的排放量求和,并生成一张类似的地图,用于年度总和,而不是月度值。我可以这样总结数据:

sum=ds.co2.sum()

其中:


阵列(453300000)

这对整个数据求和,只给出一个值。我想生成一个新的数据集,其中包含每个lat/lon组合的月度数据总和,有效地给出“年度”总和,然后我可以生成一张地图


任何帮助都将不胜感激

好吧,我想我做到了,在“时间”维度上求和似乎是可行的!:

sum2016=ds.co2.sum(dim=('time'))

产生:

<xarray.DataArray 'co2' (lat: 733, lon: 720)>
array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
   [ 0.,  0.,  0., ...,  0.,  0.,  0.],
   [ 0.,  0.,  0., ...,  0.,  0.,  0.],
   ..., 
   [ 0.,  0.,  0., ...,  0.,  0.,  0.],
   [ 0.,  0.,  0., ...,  0.,  0.,  0.],
   [ 0.,  0.,  0., ...,  0.,  0.,  0.]])
Coordinates:
  * lat      (lat) float32 49.9 49.9083 49.9167 49.925 49.9333 49.9417 49.95 ...
  * lon      (lon) float32 -11.0 -10.9917 -10.9833 -10.975 -10.9667 -10.9583 ...

数组([[0,0,0.,…,0,0,0,0.]),
[ 0.,  0.,  0., ...,  0.,  0.,  0.],
[ 0.,  0.,  0., ...,  0.,  0.,  0.],
..., 
[ 0.,  0.,  0., ...,  0.,  0.,  0.],
[ 0.,  0.,  0., ...,  0.,  0.,  0.],
[ 0.,  0.,  0., ...,  0.,  0.,  0.]])
协调:
*lat浮动32 49.9 49.9083 49.9167 49.925 49.9333 49.9417 49.95。。。
*lon(lon)float32-11.0-10.9917-10.9833-10.975-10.9667-10.9583。。。
这张年度金额图:

不幸的是,所有的NA值都变成了零,我将不得不以某种方式将它们改回NA

编辑:

我使用以下代码将0.0值转换为NA:

sum2016mask=sum2016。其中(sum2016!=0.0)

给这张更好的地图:


正如您在回答中所指出的,可以通过提供维度名称沿数据集或数据阵列的任何(或多个)维度执行:

sum2016 = ds.co2.sum(dim='time')
默认情况下,聚合操作跳过浮点中的NaN值。您可以使用
skipna=False
参数保留NaN值,例如:

如果数据集中有多个年份,则可以计算年份(不管如何计算),然后对一年中的月份进行求和。例如,如果数据集中的时间只是几个月的位置索引,并且可以使用
ds.time%12
查找年份,则可以使用以下内容查找年度总数:

ds.co2.groupby(ds.time%12).sum(dim='time', skipna=False)
获取年度时间序列。

您的答案更好:)谢谢!