@@ -363,8 +363,8 @@ def percentiles(
363
363
@tools .groupby_kwargs_decorator
364
364
@tools .season_order_decorator
365
365
def anomaly (
366
- dataarray : xr .DataArray ,
367
- climatology : xr .DataArray = None ,
366
+ dataarray : T . Union [ xr .Dataset , xr . DataArray ] ,
367
+ climatology : T . Union [ xr .Dataset , xr . DataArray , None ] = None ,
368
368
climatology_range : tuple = (None , None ),
369
369
time_dim : T .Union [str , None ] = None ,
370
370
groupby_kwargs : dict = {},
@@ -431,22 +431,35 @@ def anomaly(
431
431
anomaly_array = resample (
432
432
anomaly_array , how = "mean" , ** reduce_kwargs , ** groupby_kwargs , dim = time_dim
433
433
)
434
+ if isinstance (dataarray , xr .Dataset ):
435
+ for var in anomaly_array .data_vars :
436
+ anomaly_array [var ] = update_anomaly_array (
437
+ anomaly_array [var ], dataarray [var ], name_tag , update_attrs
438
+ )
439
+ else :
440
+ anomaly_array = update_anomaly_array (
441
+ anomaly_array , dataarray , name_tag , update_attrs
442
+ )
443
+
444
+ return anomaly_array
445
+
446
+
447
+ def update_anomaly_array (anomaly_array , original_array , name_tag , update_attrs ):
434
448
anomaly_array = anomaly_array .rename (f"{ anomaly_array .name } _{ name_tag } " )
435
- update_attrs = {** dataarray .attrs , ** update_attrs }
449
+ update_attrs = {** original_array .attrs , ** update_attrs }
436
450
if "standard_name" in update_attrs :
437
451
update_attrs ["standard_name" ] += f"_{ name_tag .replace (' ' , '_' )} "
438
452
if "long_name" in update_attrs :
439
453
update_attrs ["long_name" ] += f" { name_tag } "
440
454
441
455
anomaly_array = anomaly_array .assign_attrs (update_attrs )
442
-
443
456
return anomaly_array
444
457
445
458
446
459
@tools .time_dim_decorator
447
460
@tools .groupby_kwargs_decorator
448
461
@tools .season_order_decorator
449
- def relative_anomaly (dataarray : xr .DataArray , * args , ** kwargs ):
462
+ def relative_anomaly (dataarray : [ xr .Dataset , xr . DataArray ] , * args , ** kwargs ):
450
463
"""
451
464
Calculate the relative anomaly from a reference climatology, i.e. percentage change.
452
465
0 commit comments