Monday, November 24, 2014

Python code to plot CCCma NetCDF files in Basemap

On my other blog,, I posted an animated GIF of projected White Christmases between now and the year 2100, based on NetCDF files from the Canadian Centre for Climate Modeling and Analysis. There are plenty of examples of NetCDF with Basemap out there, but the CCCma's format was a little different, so I thought I'd post this here in case it's helpful to anyone.

  • Github repo with this script and the one I used to make the animated GIF with the nice background
  • nbviewer version of this script in nice IPython format.

Mapping Canadian Centre for Climate Modeling and Analysis (CCCma) NetCDF files with Basemap

By David Taylor,

There are plenty of tutorials about Basemap using NetCDF (.nc) files, but CCCma files are in a special format. It took me a while to get everything working, so I thought I'd share my code in case anyone else is in the same situation.

Note that the only datasets I've tried this on are from the Fourth Generation Canadian Regional Climate Model (CanRCM4) > Second Generation Earth System Model (CanESM2) > RCP 8.5 category. I do not know if other models have their NetCDF files and data within organized the same way; tweaking may be necessary.

Note that although this data is from Environment Canada, climate models from around the world can be found.

1. Download NetCDF (.nc) files from Environment Canada

I can't automate this for you, since Environment Canada requires a (free) logon, and limits the number of simultaneous downloads. Files can be downloaded from

The sample file used in this notebook is

It can be downloaded from

It contains percent snow cover for most of North America for every day from the years 2041 to 2045. Environment Canada has files projecting many different kind of atmospheric, land and oceanic data.

2. Choose what file and day you wish to use

This will be the only cell you need to enter values into. All the other cells can just be run, they will reference these values.

my_filename = ('snc_NAM-44_CCCma-CanESM2_rcp85_r1i1p1_'
# for this demo, we will see where it will be a white christmas in 2041.
my_year, my_month, my_day = (2041, 12, 25)

# calculations based on the above values:

# to increase compatibility with Python 3.x:
from __future__ import print_function
import re

# extracts variable name from beginning of filename:
my_variable = my_filename[:my_filename.find('_')]

print("my_variable = {}".format(my_variable))

first_year = int('([12][90][0-9]{2})[01][0-9]'
print("first year in .nc file = {}".format(first_year))

month_lengths = (0,31,28,31,30,31,30,31,31,30,31,30)
month_cumulative = []
counter = 0
for length in month_lengths:
    counter += length
print("month_cumulative = {}".format(month_cumulative))
days_elapsed = (365 * (my_year - first_year) + 
                month_cumulative[my_month - 1] + my_day)
print(("{} days elapsed between Jan. 1, {} and specified date "
       "of {}-{}-{}").format(days_elapsed, first_year, 
                           my_year, my_month, my_day))
print("(leap days are not counted)")


> my_variable = snc
> first year in .nc file = 2041
> month_cumulative = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
> 359 days elapsed between Jan. 1, 2041 and specified date of 2041-12-25
(leap days are not counted)

3. Extract data from .nc file

import netCDF4
# netCDF4 is not part of standard Python,
# you may have to download and install it
import numpy as np

ncfile = netCDF4.Dataset(my_filename, 'r')
# note that you'll have to download the file yourself

# Let's have a look at this file.


> Attributes:
[u'title', u'institution', u'institute_id', u'contact', u'Conventions', u'experiment', u'experiment_id', u'driving_experiment', u'driving_model_id', u'driving_model_ensemble_member', u'driving_experiment_name', u'forcing', u'model_id', u'creation_date', u'rcm_version_id', u'project_id', u'CORDEX_domain', u'frequency', u'product', u'CCCma_runid', u'references', u'history', u'data_licence']

> Variables:
OrderedDict([(u'time', <netCDF4.Variable object at 0x0000000003B986A8>), (u'rlon', <netCDF4.Variable object at 0x0000000003B98730>), (u'rlat', <netCDF4.Variable object at 0x0000000003B987B8>), (u'lon', <netCDF4.Variable object at 0x0000000003B98840>), (u'lat', <netCDF4.Variable object at 0x0000000003B988C8>), (u'rotated_pole', <netCDF4.Variable object at 0x0000000003B98950>), (u'snc', <netCDF4.Variable object at 0x0000000003B989D8>)])

We are interested in the following variables:
  • lon: an array of longitudes for a 130 x 155 grid
  • lat: an array of latitudes for a 130 x 155 grid
Note: the grid is made up of cells approximately 0.44 degrees on a side, but the grid is not exactly aligned north-south or east-west; that is why there are 130x155 each of longitude and latitude

snc: a 1825x130x155 grid of snow cover from 0 to 100 percent.

The first dimension is time, measured in days since December 1, 1949 NOT INCLUDING LEAP DAYS. In other words, there are exactly 36500 days between December 1, 1949 and December 1, 2049.

In the 'time' variable, which we do not need to use, the first value is 33246.5 days (half a day is added to make the time noon, which is unambiguously in the middle of the day instead of at the cusp between two days). We will verify this in the next cell.

import netCDF4
# netCDF4 is not part of standard Python,
# you may have to download and install it
import numpy as np

ncfile = netCDF4.Dataset(my_filename, 'r')
# note that you'll have to download the file yourself

# Let's have a look at this file.


> Shape of nc_lons: (130L, 155L)
> Shape of nc_lons: (130L, 155L)
> Shape of nc_vars before specifying day: (1825L, 130L, 155L)
> Shape of nc_vars after specifying day: (130L, 155L)
> Starting day of file: 33246.5

4. Plot map with Basemap

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
%matplotlib inline

fig = plt.figure(figsize=(8,8))
ax = fig.add_axes([0.1,0.1,0.8,0.8])
m = Basemap(width=6000000,height=4000000,
            lon_0=-93,lat_0=41, area_thresh=1000)
parallels = np.arange(0., 90, 10.)
meridians = np.arange(180.,360.,10.)
x, y = m(nc_lons, nc_lats)
clevs = range(1,101)
cs = m.contourf(x,y,nc_vars,clevs,
cbar = m.colorbar(cs,location='bottom',pad="5%")
cbar.set_label('% snow cover')
plt.title('Snow cover projected on Dec. 25, 2041')

• • •


  1. أفضل شركه نقل عفش بالرياض
    اليكم افضل النصائح شراء اثاث مستعمل التي تقدم لكم المساعدة في علي نقل العفش بأسهل الطرق المتبعة ودون اي خسائر او تلفيات لعفشك او اجهزتك كما ان تقوم شركات نقل الاثاث بالعديد من الطرق والتنوعة والتي لها اختلاف وطابع خاص عن باقي الشركات في نقل الاثاث فهناك العديد من الشركات التي تقوم بنقل الاثاث بطرق غير صحيحه وخاطئة تضر بالاثاث وتعرضة للتجريح والخدش فأن شراء اثاث مستعمل جدةتعد من افضل الشركات بالرياض التي تقوم بنقل الاثاث بأفضل الطرق المستخدمة والصحيحة في نقل الاثاث ومن تلك الطرق اننا نقوم بتغليف الاثاث اولا بالتغليف الحراري والذي له اهمية كبيرة وهو من افضل طرق التغليف علي الاطلاق ويتم استخدامه في العديد من الاستخدامات المتنوعة والعديدة ، وكما ان لدي اثاث مستعمل
    التغليف الذي يسمي التغليف بالمفرقعات الذي يتم استخدامة في تغليف الاطباق والاواني بأنواعها والزجاج واي شئ يمكن ان يكون قابل للكسر فاعتمادنا الاساسي في تأدية مهمتنا هي ان نقوم بتوصيل اثاثك من دون ان يحدث له اي تلفيات او خدوش او كسرفي نقل اثاث بالرياض كما اننا نعتمد علي اكبر السيارات في نقل العفش واحدث الرافعات التي تقوم برفع عفشك في الاماكن العالية .
    افضل الخطوات المتبعة بشركة نقل اثاث بالرياض
    - الخطوة الاولي التي تهتم بها محلات شراء الاثاث المستعمل بجدة عملية الفك بالرغم من انها تبدو سهلة الا انها تحتاج الي متخصصين وفريق مدرب ولة خبرة طويلة في كيفية الفك والتركيب للحفاظ علية من الخدش او الثني والحفاظ عليه بشكل تام .
    شركة شراء اثاث مستعمل بالرياض

    -الخطوة الثانية وهي تغليف الاثاث بشكل صحيح حتي يتم حمايتة من الاتربة والخدوش التي يتعرض لها اثناء عملية النقل وكذلك نستخدم ممتصات لاي نوع من انواع الصدمات المختلفة التي تؤدي الي تلف الاثاث بأستخدام قطع القماش مع الفلين او بلاستيك الفقاعات او النايلون لبعض من القطع
    شراء الاثاث المستعمل بالرياض
    -الخطوة الثالثة وهي تركيب الاثاث وهي خطوة هامة ايضا عندما يتم نقل الاثاث الي المنزل الجديد بشكل سليم نقوم بترتيب الاثاث داخل المنزل التسليمة الي عميلنا في ابهي صورة كما ان لدينا متخصصين في تركيب الاثاث دون تعرضة لاي تلفيات بأحدث ادوات الفك والتركيب فهم عمالة مدربة بتقنية عالية كما ان شركتنا لها اسعار تنافسية ليس لها مثيل عن باقي شركات نقل الاثاث بالرياض
    حقين شراء الاثاث المستعمل بالرياض


  2. عملائنا الكرام اذا كنت تبحث عن افضل واقوي شركة شركة تركيب اثاث ايكيا بالرياضفى هذا المجال كما انها تتميز بالصدارة بين الكثير من الشركات المتواجدة في الرياض
    شركة تركيب اثاث ايكيا بالرياض
    كما اننا نتميز عن باقي الشركات بأننا لدينا افضل الطرق وافضل الادوات والمعدات فى تركيب غرف النوم الصيني

    كما اننا متقدمين عملائنا الكرام بتقديم افضل خدمات فني تركيب اثاث ايكيا بالرياضمع توفير امهر الفنيين في تركيب اثاث ايكيا كما اننا نعلم جيدا تعدد حاجات عملائنا من احتياج الفنيين والمتخصصين في عمليات فك وتركيب اثاث ايكيا بالرياض واحتاجهم لتواجد المساعدين لانجاز مهامهم بدقة وعلي اكمل وجة ممكن
    كما اننا نقدم العديد من الديكورات المختلفة والتصميمات الساحرة واحدث الالوان العصرية التي لن تجدوها الا من خلال تركيب اثاث ايكيا بالرياض كما اننا نوفرها بأحدث الموديلات التي تتناسب مع احتياجات جميع عملائنا
    فأننا نحيط علمكم اذا كنت تريد تركيب اي اثاث في منزلك فلديك
    شركة تركيب ستائر بالرياض
    عامل تركيب ستائر بالرياض
    شركة تركيب غرف نوم بالرياض
    فني تركيب غرف نوم بالرياض
    شركة تركيب باركية بالرياض
    ارخص تركيب باركية بالرياض
    شركة تركيب عفش بالرياض
    شركة تنظيف مكيفات بالرياض
    لزيارة موقعنا

  3. Gaining Python certifications will validate your skills and advance your career.
    python certification

  4. Currently Python is the most popular Language in IT. Python adopted as a language of choice for almost all the domain in IT including Web Development, Cloud Computing (AWS, OpenStack, VMware, Google Cloud, etc.. ),Read More


  5. تنظيف منازل بالدمام تنظيف منازل بالدمام
    تنظيف منازل بالاحساء تنظيف منازل بالاحساء
    تنظيف منازل بمكة تنظيف منازل بمكة
    تنظيف منازل بجدة تنظيف منازل بجدة
    تنظيف منازل بالمدينة المنورة تنظيف منازل بالمدينة المنورة

  6. Hallo, yukk ikut gabung di DADUPOKER

    dadupokerqiu (dot) net

    Kami hadir dengan permainan baru loh, kalau sebelumnya kalian bisa menikmati 8 permainan sekaligus hanya dengan 1 ID, maka sekarang kalian bisa memainkan 8 permainan sekaligus dengan hanya menggunakan 1 ID saja.

    Penasaran sama permainan apa saja yang kami sediakan? Ini nih 8 Permainan yang ada di situs kami :
    > POKER
    > SAKONG
    > ADUQ
    > BANDAR 66

    Dan kami juga memiliki beberapa bank yang bisa digunakan untuk transaksi deposit anda loh. Dan hanya dengan minimal deposit sebesar Rp 20.000 saja kalian sudah bisa mulai bermain.

    Gak susah kan? Yukk langsung gabung yaaa ..
    Kalau ada yang kurang mengerti bisa langsung kunjungi situs kami,
    WA :

    Kami hadir 24 jam untuk melayani anda.

    Oh yah gak ketinggalan juga kami memiliki promo yang sedang berlaku di situs kami loh,

    1. تتعامل شركة ابداع التظليل توفير جميع أنواع المظلات المميزة المطلوبة والتى تساعد فى القيام بكافة الخدمات المطلوبة التى ترغب فى القيام بيه فإذا كنت ترغب فى القيام بخدمات المظلات أو السواتر أو الشبك أو القيام بعملية الصيانة اللازمة فعليك أن تتواصل مع خدماتنا الان لنقوم بما هو مطلوب.
      مظلات وسواتر ابداع التظليل
      تركيب مظلات
      مظلات الرياض
      تركيب سواتر
      المظلات من الأشياء الهامة التى لابد من القيام بيه والتى لابد من السعي من وراء التخلص من العيوب التقليدية التى تتعرض له، فلدينا مختلف أنواع الأقمشة الغير قابلة للاشتعال والتعامل مع مجموعة مميزة من الأجهزة والالات التى تساعد على اللحام بشكل متمكن حتى لا تسبب فى التعرض لأى مشكلة فيما بعد.

      تركيب هناجر الرياض
      متواجدين فى أى مكان فى الرياض من شمال الرياض وشرق الرياض وغرب الرياض وجنوب الرياض ونهتم بأعمال الصيانة اللازمة التى تتم للمظلات والهناجر والسواتر وغيرها من الأنواع المتواجدة مع تقديم كافة الضمانات على الخدمة التى تحتاج إلية بعد أن يتم القيام بكافة الخدمات اللازمة فلا داعى للقلق ولا داعى للبحث عن الخدمة المطلوبة

      برجولات خشبية
      برجولات اسطح
      هناك العديد من أنواع الشبوك المختلفة التى تحتاج إليها فى المكان من أهم ما يميز الشبوك التى تتعامل بيها الشركة هى مقاومة للعوامل المختلفة التى تتعرض لها على مدار فصول السنة ولا تحتاج لكثير من التكاليف و هناك العديد من أنواع الشبوك المختلفة المطلوبة فى المكان على حسب ما يحتاج إلية العميل ومتوفر لدينا العديد من الأنواع والألوان التى يتم إختيارها على حسب ذوق عملائنا بالمكان.

    2. شبوك
      شبوك امنية
      شبوك زراعية
      شبوك حدائق
      مجموعة مختلفة من القرميد المميزة التى تحتاج إلية على سطح المنزل والتى تساهم بشكل كبير فى تغطية المنزل بأشكال وديكورات مختلفة فلا داعى للقلق ولا داعى للبحث عن كيفية القيام بعملية التركيب والإختيار.

      قرميد معدني
      متخصصين فى جميع أنواع المظلات المختلفة المطلوبة على مستوى الرياض والقيام بعملية التركيب بالدقة والجوده العالية مع توفير الخدمات المطلوبة وأختيار أفضل الخامات اللازمة والتى تساهم فى الإحتفاظ بالخدمة بشكل طويل والتى تحقق فى القيام بعمل المظلات المطلوبة

      مظلات خزانات
      مظلات مدارس
      مظلات سيارات
      مظلات مسابح
      مظلات هرمية
      سواتر قماس بى فى سى وسواتر مختلفة من الأقمشة والحديد وسوات للأحواش وللأماكن المطلوبة وعلى حسب المكان المطلوب وعلى حسب درجة الضوء والحرارة والتى تسمح بمرور الضوء

      سواتر خشبية
      سواتر حديد
      سواتر قماش

    3. المظلات من الخدمات الهامة التى لا غنى عنها فى المكان فهى تساعد على حماية المكان من أشعة الشمس والضوء والحرارة العالية والتعامل مع مجموعة من الأقمشة المميزة والتعامل مع مجموعة من الخدمات العالية الجودة فلا داعى للقلق ولا داعى للبحث عن الشركات ،فنحن نقدم لكم الأفضل دائما.

      مظلات القشيري
      تركيب مظلات
      تعتمد الشركة على توفير مجموعة من المظلات المختلفة من حيث الشكل والألوان والتصمميات المختلفة والتى تساهم فى الوص