|
49 | 49 | "outputs": [], |
50 | 50 | "source": [ |
51 | 51 | "year_start = 2004\n", |
52 | | - "year_stop = 2022" |
| 52 | + "year_stop = 2021" |
53 | 53 | ] |
54 | 54 | }, |
55 | 55 | { |
|
73 | 73 | " \"variable\": \"xch4\",\n", |
74 | 74 | " \"sensor_and_algorithm\": \"merged_emma\",\n", |
75 | 75 | " \"version\": \"4_5\",\n", |
76 | | - " \"year\": [str(year) for year in range(year_start, year_stop + 1)],\n", |
| 76 | + " \"year\": [str(year) for year in range(year_start - 1, year_stop + 2)],\n", |
77 | 77 | " \"month\": [f\"{i:02d}\" for i in range(1, 13)],\n", |
78 | 78 | " \"day\": [f\"{i:02d}\" for i in range(1, 32)],\n", |
79 | 79 | "}" |
|
94 | 94 | "metadata": {}, |
95 | 95 | "outputs": [], |
96 | 96 | "source": [ |
97 | | - "def spatial_weighted_mean(ds, dim=None):\n", |
| 97 | + "def weight_dataset(ds):\n", |
98 | 98 | " weights = np.abs(np.cos(np.deg2rad(ds[\"latitude\"])))\n", |
99 | | - " return ds.weighted(weights).mean(dim, keep_attrs=True)\n", |
| 99 | + " return ds.weighted(weights)\n", |
| 100 | + "\n", |
| 101 | + "\n", |
| 102 | + "def spatial_weighted_mean(ds, dim=None):\n", |
| 103 | + " return weight_dataset(ds).mean(dim, keep_attrs=True)\n", |
| 104 | + "\n", |
| 105 | + "\n", |
| 106 | + "def spatial_weighted_std(ds, dim=None):\n", |
| 107 | + " return weight_dataset(ds).std(dim, keep_attrs=True)\n", |
100 | 108 | "\n", |
101 | 109 | "\n", |
102 | 110 | "def regrid(ds, d_lon, d_lat, lon1=180):\n", |
|
199 | 207 | "dataarrays = []\n", |
200 | 208 | "for zonal_first in [True, False]:\n", |
201 | 209 | " da = compute_growth_rate(ds, zonal_first=zonal_first)\n", |
202 | | - " dataarrays.append(da.expand_dims(zonal_first=[zonal_first]))\n", |
203 | | - "da = xr.concat(dataarrays, \"zonal_first\")" |
| 210 | + " dataarrays.append(\n", |
| 211 | + " da.expand_dims(method=[\"Zonal-first\" if zonal_first else \"Standard\"])\n", |
| 212 | + " )\n", |
| 213 | + "da = xr.concat(dataarrays, \"method\").sel(time=slice(str(year_start), str(year_stop)))" |
204 | 214 | ] |
205 | 215 | }, |
206 | 216 | { |
|
218 | 228 | "metadata": {}, |
219 | 229 | "outputs": [], |
220 | 230 | "source": [ |
221 | | - "facet = da.plot(col=\"latitude\", col_wrap=3, hue=\"zonal_first\")\n", |
| 231 | + "facet = da.plot(col=\"latitude\", col_wrap=3, hue=\"method\")\n", |
222 | 232 | "for ax in facet.axs.flatten():\n", |
223 | 233 | " ax.grid()\n", |
224 | 234 | " for label in ax.get_xticklabels():\n", |
|
240 | 250 | "metadata": {}, |
241 | 251 | "outputs": [], |
242 | 252 | "source": [ |
243 | | - "da_year = da.groupby(\"time.year\").map(spatial_weighted_mean, dim=[\"time\", \"latitude\"])\n", |
244 | | - "df_year = da_year.to_pandas()\n", |
245 | | - "ax = df_year.T.plot.bar()\n", |
| 253 | + "grouped = da.groupby(\"time.year\")\n", |
| 254 | + "da_mean = grouped.map(spatial_weighted_mean, dim=[\"time\", \"latitude\"])\n", |
| 255 | + "da_std = grouped.map(spatial_weighted_std, dim=[\"time\", \"latitude\"])\n", |
| 256 | + "df_mean = da_mean.to_pandas().T\n", |
| 257 | + "df_std = da_std.to_pandas().T\n", |
| 258 | + "ax = df_mean.plot.bar(yerr=df_std)\n", |
246 | 259 | "ax.grid()\n", |
247 | | - "_ = ax.set_ylabel(f\"{da_year.long_name} [{da_year.units}]\")" |
| 260 | + "_ = ax.set_ylabel(f\"{da_mean.long_name} [{da_mean.units}]\")" |
248 | 261 | ] |
249 | 262 | } |
250 | 263 | ], |
|
0 commit comments