|
163 | 163 | " .squeeze()\n", |
164 | 164 | " )\n", |
165 | 165 | " da.attrs = {\"units\": \"ppm/year\", \"long_name\": \"Growth Rate\"}\n", |
166 | | - " return da" |
| 166 | + " return da\n", |
| 167 | + "\n", |
| 168 | + "\n", |
| 169 | + "def band_from_central_latitude(latitude):\n", |
| 170 | + " latitudes = [latitude - 10, latitude + 10]\n", |
| 171 | + " return \" – \".join(\n", |
| 172 | + " [f\"{abs(int(lat))}°{'S' if lat < 0 else 'N'}\" for lat in latitudes]\n", |
| 173 | + " )" |
167 | 174 | ] |
168 | 175 | }, |
169 | 176 | { |
|
229 | 236 | "outputs": [], |
230 | 237 | "source": [ |
231 | 238 | "facet = da.plot(col=\"latitude\", col_wrap=3, hue=\"method\")\n", |
232 | | - "for ax in facet.axs.flatten():\n", |
| 239 | + "for ax, sel_dict in zip(facet.axs.flatten(), facet.name_dicts.flatten()):\n", |
233 | 240 | " ax.grid()\n", |
| 241 | + " ax.set_title(band_from_central_latitude(sel_dict[\"latitude\"]))\n", |
234 | 242 | " for label in ax.get_xticklabels():\n", |
235 | 243 | " label.set_rotation(90)" |
236 | 244 | ] |
|
253 | 261 | "with xr.set_options(keep_attrs=True):\n", |
254 | 262 | " anomaly = da - spatial_weighted_mean(da)\n", |
255 | 263 | "anomaly.attrs[\"long_name\"] = \"Δ\" + anomaly.long_name\n", |
256 | | - "facet = anomaly.plot(row=\"method\", robust=True, x=\"time\", figsize=(10, 10))\n", |
| 264 | + "yticks = anomaly[\"latitude\"].values.tolist()\n", |
| 265 | + "facet = anomaly.plot(\n", |
| 266 | + " row=\"method\", robust=True, x=\"time\", figsize=(10, 10), yticks=yticks\n", |
| 267 | + ")\n", |
257 | 268 | "for ax in facet.axs.flatten():\n", |
258 | | - " ax.grid()" |
| 269 | + " ax.grid()\n", |
| 270 | + " ax.set_yticklabels([band_from_central_latitude(lat) for lat in ax.get_yticks()])" |
259 | 271 | ] |
260 | 272 | }, |
261 | 273 | { |
|
0 commit comments