Using python's cartopy package to georeference EASE-Grid 2.0 cube data

This notebook demonstrates the following typical tasks you might want to do with CETB EASE-Grid 2.0 cube data:

  1. Display a couple of time steps of a cube on the same plot
  2. Use the mouse to get the coordinates and values of the data in the subplots

You will need to be working in a python environment with the following packages installed. I think the cartopy features here require it to be a python 3 environment:

cartopy matplotlib netCDF4


In [1]:
%matplotlib notebook
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from netCDF4 import Dataset
import numpy as np

In [2]:
geod = ccrs.Geodetic()
e2n = ccrs.LambertAzimuthalEqualArea(central_latitude=90.0)

Read in a CETB cube file and use it to get the projected extent


In [3]:
file = "/Users/brodzik/cetb_data/v1.3/F16_SSMIS/N/cubes_WesternUS/CETB.cubefile.WesternUS.F16_SSMIS-19H-SIR-CSU-v1.3.2005.TB.nc"
f = Dataset(file, 'r', 'netCDF4')

In [4]:
x = f.variables['x'][:]
y = f.variables['y'][:]

In [5]:
# Define extent in projected coordinates.
# Use the x, y coordinate variables in the file, which give the centers of the pixels, 
# and adjust these by 1/2 pixel to get the corners of the corner pixels
# We want extent as [x_min, x_max, y_min, y_max]
extent = [x[0], x[-1], y[-1], y[0]]
extent


Out[5]:
[-6071875.0, -3553125.0, 1028125.0, 3071875.0]

In [6]:
x_res_m = np.fabs(x[1] - x[0])
y_res_m = np.fabs(y[1] - y[0])

In [7]:
x_res_m, y_res_m


Out[7]:
(6250.0, 6250.0)

In [8]:
extent = [x[0] - (x_res_m / 2.), x[-1] + (x_res_m / 2.), 
          y[-1] - (y_res_m / 2.), y[0] + (y_res_m / 2.)]
extent


Out[8]:
[-6075000.0, -3550000.0, 1025000.0, 3075000.0]

In [9]:
tb = f.variables['TB'][:]
tb.shape


Out[9]:
(730, 328, 404)

In [10]:
f.close()

In [11]:
for t in np.arange(730):
    print(t, np.min(tb[t,:,:]), np.max(tb[t,:,:]))


0 -- --
1 -- --
2 -- --
3 -- --
4 -- --
5 -- --
6 -- --
7 -- --
8 -- --
9 -- --
10 -- --
11 -- --
12 -- --
13 -- --
14 -- --
15 -- --
16 -- --
17 -- --
18 -- --
19 -- --
20 -- --
21 -- --
22 -- --
23 -- --
24 -- --
25 -- --
26 -- --
27 -- --
28 -- --
29 -- --
30 -- --
31 -- --
32 -- --
33 -- --
34 -- --
35 -- --
36 -- --
37 -- --
38 -- --
39 -- --
40 -- --
41 -- --
42 -- --
43 -- --
44 -- --
45 -- --
46 -- --
47 -- --
48 -- --
49 -- --
50 -- --
51 -- --
52 -- --
53 -- --
54 -- --
55 -- --
56 -- --
57 -- --
58 -- --
59 -- --
60 -- --
61 -- --
62 -- --
63 -- --
64 -- --
65 -- --
66 -- --
67 -- --
68 -- --
69 -- --
70 -- --
71 -- --
72 -- --
73 -- --
74 -- --
75 -- --
76 -- --
77 -- --
78 -- --
79 -- --
80 -- --
81 -- --
82 -- --
83 -- --
84 -- --
85 -- --
86 -- --
87 -- --
88 -- --
89 -- --
90 -- --
91 -- --
92 -- --
93 -- --
94 -- --
95 -- --
96 -- --
97 -- --
98 -- --
99 -- --
100 -- --
101 -- --
102 -- --
103 -- --
104 -- --
105 -- --
106 -- --
107 -- --
108 -- --
109 -- --
110 -- --
111 -- --
112 -- --
113 -- --
114 -- --
115 -- --
116 -- --
117 -- --
118 -- --
119 -- --
120 -- --
121 -- --
122 -- --
123 -- --
124 -- --
125 -- --
126 -- --
127 -- --
128 -- --
129 -- --
130 -- --
131 -- --
132 -- --
133 -- --
134 -- --
135 -- --
136 -- --
137 -- --
138 -- --
139 -- --
140 -- --
141 -- --
142 -- --
143 -- --
144 -- --
145 -- --
146 -- --
147 -- --
148 -- --
149 -- --
150 -- --
151 -- --
152 -- --
153 -- --
154 -- --
155 -- --
156 -- --
157 -- --
158 -- --
159 -- --
160 -- --
161 -- --
162 -- --
163 -- --
164 -- --
165 -- --
166 -- --
167 -- --
168 -- --
169 -- --
170 -- --
171 -- --
172 -- --
173 -- --
174 -- --
175 -- --
176 -- --
177 -- --
178 -- --
179 -- --
180 -- --
181 -- --
182 -- --
183 -- --
184 -- --
185 -- --
186 -- --
187 -- --
188 -- --
189 -- --
190 -- --
191 -- --
192 -- --
193 -- --
194 -- --
195 -- --
196 -- --
197 -- --
198 -- --
199 -- --
200 -- --
201 -- --
202 -- --
203 -- --
204 -- --
205 -- --
206 -- --
207 -- --
208 -- --
209 -- --
210 -- --
211 -- --
212 -- --
213 -- --
214 -- --
215 -- --
216 -- --
217 -- --
218 -- --
219 -- --
220 -- --
221 -- --
222 -- --
223 -- --
224 -- --
225 -- --
226 -- --
227 -- --
228 -- --
229 -- --
230 -- --
231 -- --
232 -- --
233 -- --
234 -- --
235 -- --
236 -- --
237 -- --
238 -- --
239 -- --
240 -- --
241 -- --
242 -- --
243 -- --
244 -- --
245 -- --
246 -- --
247 -- --
248 -- --
249 -- --
250 -- --
251 -- --
252 -- --
253 -- --
254 -- --
255 -- --
256 -- --
257 -- --
258 -- --
259 -- --
260 -- --
261 -- --
262 -- --
263 -- --
264 -- --
265 -- --
266 -- --
267 -- --
268 -- --
269 -- --
270 -- --
271 -- --
272 -- --
273 -- --
274 -- --
275 -- --
276 -- --
277 -- --
278 -- --
279 -- --
280 -- --
281 -- --
282 -- --
283 -- --
284 -- --
285 -- --
286 -- --
287 -- --
288 -- --
289 -- --
290 -- --
291 -- --
292 -- --
293 -- --
294 -- --
295 -- --
296 -- --
297 -- --
298 -- --
299 -- --
300 -- --
301 -- --
302 -- --
303 -- --
304 -- --
305 -- --
306 -- --
307 -- --
308 -- --
309 -- --
310 -- --
311 -- --
312 -- --
313 -- --
314 -- --
315 -- --
316 -- --
317 -- --
318 -- --
319 -- --
320 -- --
321 -- --
322 -- --
323 -- --
324 -- --
325 -- --
326 -- --
327 -- --
328 -- --
329 -- --
330 -- --
331 -- --
332 -- --
333 -- --
334 -- --
335 -- --
336 -- --
337 -- --
338 -- --
339 -- --
340 -- --
341 -- --
342 -- --
343 -- --
344 -- --
345 -- --
346 -- --
347 -- --
348 -- --
349 -- --
350 -- --
351 -- --
352 -- --
353 -- --
354 -- --
355 -- --
356 -- --
357 -- --
358 -- --
359 -- --
360 -- --
361 -- --
362 -- --
363 -- --
364 -- --
365 -- --
366 -- --
367 -- --
368 -- --
369 -- --
370 -- --
371 -- --
372 -- --
373 -- --
374 -- --
375 -- --
376 -- --
377 -- --
378 -- --
379 -- --
380 -- --
381 -- --
382 -- --
383 -- --
384 -- --
385 -- --
386 -- --
387 -- --
388 -- --
389 -- --
390 -- --
391 -- --
392 -- --
393 -- --
394 -- --
395 -- --
396 -- --
397 -- --
398 -- --
399 -- --
400 -- --
401 -- --
402 -- --
403 -- --
404 -- --
405 -- --
406 -- --
407 -- --
408 -- --
409 -- --
410 -- --
411 -- --
412 -- --
413 -- --
414 -- --
415 -- --
416 -- --
417 -- --
418 -- --
419 -- --
420 -- --
421 -- --
422 -- --
423 -- --
424 -- --
425 -- --
426 -- --
427 -- --
428 -- --
429 -- --
430 -- --
431 -- --
432 -- --
433 -- --
434 -- --
435 -- --
436 -- --
437 -- --
438 -- --
439 -- --
440 -- --
441 -- --
442 -- --
443 -- --
444 -- --
445 -- --
446 -- --
447 -- --
448 -- --
449 -- --
450 -- --
451 -- --
452 -- --
453 -- --
454 -- --
455 -- --
456 -- --
457 -- --
458 -- --
459 -- --
460 -- --
461 -- --
462 -- --
463 -- --
464 -- --
465 -- --
466 -- --
467 -- --
468 -- --
469 -- --
470 -- --
471 -- --
472 -- --
473 -- --
474 -- --
475 -- --
476 -- --
477 -- --
478 -- --
479 -- --
480 -- --
481 -- --
482 -- --
483 -- --
484 -- --
485 -- --
486 -- --
487 -- --
488 -- --
489 -- --
490 -- --
491 -- --
492 -- --
493 -- --
494 -- --
495 -- --
496 -- --
497 -- --
498 -- --
499 -- --
500 -- --
501 -- --
502 -- --
503 -- --
504 -- --
505 -- --
506 -- --
507 -- --
508 -- --
509 -- --
510 -- --
511 -- --
512 -- --
513 -- --
514 -- --
515 -- --
516 -- --
517 -- --
518 -- --
519 -- --
520 -- --
521 -- --
522 -- --
523 -- --
524 -- --
525 -- --
526 -- --
527 -- --
528 -- --
529 -- --
530 -- --
531 -- --
532 -- --
533 -- --
534 -- --
535 -- --
536 -- --
537 -- --
538 -- --
539 -- --
540 -- --
541 -- --
542 -- --
543 -- --
544 -- --
545 -- --
546 -- --
547 -- --
548 -- --
549 -- --
550 -- --
551 -- --
552 -- --
553 -- --
554 -- --
555 -- --
556 -- --
557 -- --
558 -- --
559 -- --
560 -- --
561 -- --
562 -- --
563 -- --
564 -- --
565 -- --
566 -- --
567 -- --
568 -- --
569 -- --
570 -- --
571 -- --
572 -- --
573 -- --
574 -- --
575 -- --
576 -- --
577 -- --
578 -- --
579 -- --
580 -- --
581 -- --
582 -- --
583 -- --
584 -- --
585 -- --
586 -- --
587 -- --
588 -- --
589 -- --
590 -- --
591 -- --
592 -- --
593 -- --
594 -- --
595 -- --
596 -- --
597 -- --
598 -- --
599 -- --
600 -- --
601 -- --
602 -- --
603 -- --
604 -- --
605 -- --
606 -- --
607 -- --
608 96.89 297.5
609 95.82 283.59
610 102.61 313.58
611 106.729996 284.19
612 99.799995 304.32
613 96.43 283.21
614 99.82 289.83
615 98.46 302.19
616 110.34 298.13998
617 86.4 305.19998
618 105.0 297.9
619 106.06 304.28
620 102.409996 329.44998
621 101.229996 300.75
622 105.64 281.22998
623 -- --
624 -- --
625 -- --
626 -- --
627 -- --
628 -- --
629 -- --
630 -- --
631 -- --
632 -- --
633 -- --
634 -- --
635 -- --
636 -- --
637 -- --
638 -- --
639 -- --
640 -- --
641 -- --
642 -- --
643 -- --
644 -- --
645 84.36 289.16998
646 79.259995 293.13998
647 88.56 282.72998
648 95.52 292.6
649 98.07 311.32
650 91.509995 284.00998
651 98.71 283.41
652 98.06 305.8
653 100.03 286.61
654 107.689995 279.96
655 108.93 281.43
656 102.869995 305.88998
657 103.619995 278.47998
658 99.78 301.82
659 103.32 275.93
660 90.009995 284.58
661 87.54 279.9
662 85.729996 276.05
663 93.74 297.97998
664 101.6 299.93
665 100.61 294.83
666 88.909996 279.77
667 103.049995 279.11
668 100.0 289.19
669 98.369995 282.34
670 98.99 274.88998
671 94.909996 276.19
672 100.2 310.82
673 100.28 274.57
674 89.34 306.63998
675 96.47 272.34
676 82.119995 319.09
677 84.1 275.12
678 84.729996 284.38998
679 96.34 299.13998
680 98.36 297.11
681 98.31 285.18
682 93.86 289.25998
683 97.619995 276.87
684 96.82 283.66
685 97.65 280.33
686 84.79 276.79
687 95.39 279.07
688 98.46 301.21
689 100.72 276.63998
690 98.409996 308.8
691 101.659996 275.93
692 92.909996 302.28
693 85.33 276.13998
694 94.15 296.6
695 94.509995 306.78
696 94.36 301.03998
697 94.27 287.12
698 90.15 277.16998
699 96.409996 276.72
700 105.329994 287.56
701 97.28 279.3
702 96.229996 276.25
703 94.189995 279.61
704 98.869995 301.56
705 98.57 278.58
706 100.53 294.44998
707 104.43 278.75998
708 102.0 293.68
709 103.72 277.87
710 92.04 283.96
711 97.64 289.13998
712 115.93 317.49
713 111.1 282.88
714 97.15 284.13
715 99.65 281.08
716 101.189995 278.88998
717 100.079994 278.16
718 95.78 281.88998
719 98.189995 277.82
720 99.82 294.09
721 99.97 277.15
722 97.299995 285.37
723 90.1 276.46
724 93.71 301.22998
725 92.84 276.24
726 89.75 278.33
727 100.049995 291.22
728 107.57 306.96
729 106.799995 276.34

Note that mouse functions work for pan/zoom on either subplot


In [12]:
fig = plt.figure(figsize=(8,4))

axes = fig.subplots(1, 2, subplot_kw=dict(projection=e2n))

for ax in axes:
    ax.set_extent(extent, crs=e2n)
    
axes[0].imshow(tb[645,:,:], extent=extent, transform=e2n, origin='upper')
axes[1].imshow(tb[646,:,:], extent=extent, transform=e2n, origin='upper')

for ax in axes:
    ax.gridlines(color='gray', linestyle='--')
    ax.coastlines()

fig.tight_layout()



In [ ]: