Generating Climatologies

This notebook shows how to download images from svrimg.org and process them to create period "normals"

First, load the necessary data.

df_svrgis is a file that contains all of the SVRGIS attributes. The index column is used to access images.

In [1]:
from svrimg.utils.get_tables import get_index_table, get_svrgis_table

df_svrgis = get_svrgis_table(data_dir="../data/csvs/")

df_svrgis.head()
Out[1]:
om tz st stf stn mag inj fat loss closs ... f3 f4 fc init_date fmt_date date_utc yr mo dy hr
uid
199601011725z000000001 1 3 FL 12 1 0 0 0 0.04 0.0 ... 0 0 0 1996-01-01-11:25:00 1/1/1996 11:25 1/1/1996 17:25 1996 1 1 17
199601030010z000000859 859 3 SC 45 1 0 0 0 0.03 0.0 ... 0 0 0 1996-01-02-18:10:00 1/2/1996 18:10 1/3/1996 0:10 1996 1 3 0
199601030020z000000860 860 3 SC 45 2 0 0 0 0.00 0.0 ... 0 0 0 1996-01-02-18:20:00 1/2/1996 18:20 1/3/1996 0:20 1996 1 3 0
199601031307z000000004 4 3 FL 12 2 1 9 0 1.20 0.0 ... 0 0 0 1996-01-03-07:07:00 1/3/1996 7:07 1/3/1996 13:07 1996 1 3 13
199601031340z000000005 5 3 FL 12 3 0 0 0 0.10 0.0 ... 0 0 0 1996-01-03-07:40:00 1/3/1996 7:40 1/3/1996 13:40 1996 1 3 13

5 rows × 31 columns

In [2]:
from imageio import imread
import numpy as np

vals = []
for fname in ['test_img1', 'test_img2', 'test_img3', 'test_img4', 'test_img5']:
    
    vals.append(imread(fname + ".png", pilmode='P'))
    
np.save("test_imgs.npy", np.array(vals))

Load the image request utility

This utility takes unique ids and saves the images from svrimg to the given folder. It only downloads a file once, but always returns the file location even if the file was already downloaded.

In [3]:
from svrimg.utils.get_images import request_images

We can subset the svrgis information to get images of interest

In [4]:
df_subset = df_svrgis[(df_svrgis.yr==2011) & (df_svrgis.mo==4) & (df_svrgis.dy.isin([4, 5]))].copy()

df_subset
Out[4]:
om tz st stf stn mag inj fat loss closs ... f3 f4 fc init_date fmt_date date_utc yr mo dy hr
uid
201104041310z000282671 282671 3 AR 5 4 1 0 0 0.025 0.000 ... 0 0 0 2011-04-04-07:10:00 4/4/2011 7:10 4/4/2011 13:10 2011 4 4 13
201104041338z000282673 282673 3 AR 5 5 1 0 0 0.300 0.000 ... 0 0 0 2011-04-04-07:38:00 4/4/2011 7:38 4/4/2011 13:38 2011 4 4 13
201104041340z000282676 282676 3 AR 5 6 2 2 0 0.500 0.000 ... 0 0 0 2011-04-04-07:40:00 4/4/2011 7:40 4/4/2011 13:40 2011 4 4 13
201104041350z000282677 282677 3 AR 5 7 1 0 0 0.100 0.000 ... 0 0 0 2011-04-04-07:50:00 4/4/2011 7:50 4/4/2011 13:50 2011 4 4 13
201104041408z000282156 282156 3 AR 5 8 1 0 0 0.050 0.000 ... 0 0 0 2011-04-04-08:08:00 4/4/2011 8:08 4/4/2011 14:08 2011 4 4 14
201104041428z000282678 282678 3 AR 5 9 1 0 0 0.075 0.000 ... 0 0 0 2011-04-04-08:28:00 4/4/2011 8:28 4/4/2011 14:28 2011 4 4 14
201104041512z000282679 282679 3 AR 5 10 1 0 0 0.150 0.000 ... 0 0 0 2011-04-04-09:12:00 4/4/2011 9:12 4/4/2011 15:12 2011 4 4 15
201104041518z000288324 288324 3 KY 21 8 1 0 0 0.040 0.000 ... 0 0 0 2011-04-04-09:18:00 4/4/2011 9:18 4/4/2011 15:18 2011 4 4 15
201104041520z000288327 288327 3 KY 21 9 2 1 0 0.700 0.000 ... 0 0 0 2011-04-04-09:20:00 4/4/2011 9:20 4/4/2011 15:20 2011 4 4 15
201104041530z000288329 288329 3 KY 21 10 0 0 0 0.030 0.000 ... 0 0 0 2011-04-04-09:30:00 4/4/2011 9:30 4/4/2011 15:30 2011 4 4 15
201104041655z000288318 288318 3 KY 21 11 1 0 0 0.100 0.000 ... 0 0 0 2011-04-04-10:55:00 4/4/2011 10:55 4/4/2011 16:55 2011 4 4 16
201104041704z000288319 288319 3 KY 21 12 2 7 0 2.000 0.000 ... 0 0 0 2011-04-04-11:04:00 4/4/2011 11:04 4/4/2011 17:04 2011 4 4 17
201104041726z000305375 305375 3 KY 21 13 1 0 0 0.000 0.000 ... 0 0 0 2011-04-04-11:26:00 4/4/2011 11:26 4/4/2011 17:26 2011 4 4 17
201104041738z000305379 305379 3 KY 21 14 1 0 0 0.000 0.000 ... 0 0 0 2011-04-04-11:38:00 4/4/2011 11:38 4/4/2011 17:38 2011 4 4 17
201104041741z000305381 305381 3 KY 21 15 1 0 0 0.000 0.000 ... 0 0 0 2011-04-04-11:41:00 4/4/2011 11:41 4/4/2011 17:41 2011 4 4 17
201104041819z000302177 302177 3 TN 47 12 1 0 0 0.150 0.005 ... 0 0 0 2011-04-04-12:19:00 4/4/2011 12:19 4/4/2011 18:19 2011 4 4 18
201104041833z000302179 302179 3 TN 47 13 1 0 0 0.110 0.012 ... 0 0 0 2011-04-04-12:33:00 4/4/2011 12:33 4/4/2011 18:33 2011 4 4 18
201104041852z000282770 282770 3 TN 47 14 0 0 0 0.002 0.005 ... 0 0 0 2011-04-04-12:52:00 4/4/2011 12:52 4/4/2011 18:52 2011 4 4 18
201104041920z000318243 318243 3 TN 47 15 1 0 0 0.500 0.008 ... 0 0 0 2011-04-04-13:20:00 4/4/2011 13:20 4/4/2011 19:20 2011 4 4 19
201104041942z000282666 282666 3 LA 22 20 1 0 0 0.250 0.000 ... 0 0 0 2011-04-04-13:42:00 4/4/2011 13:42 4/4/2011 19:42 2011 4 4 19
201104041946z000289753 289753 3 OH 39 2 0 0 0 0.060 0.000 ... 0 0 0 2011-04-04-13:46:00 4/4/2011 13:46 4/4/2011 19:46 2011 4 4 19
201104041955z000305421 305421 3 KY 21 16 1 0 0 0.000 0.000 ... 0 0 0 2011-04-04-13:55:00 4/4/2011 13:55 4/4/2011 19:55 2011 4 4 19
201104041958z000282668 282668 3 LA 22 21 2 0 0 0.110 0.200 ... 0 0 0 2011-04-04-13:58:00 4/4/2011 13:58 4/4/2011 19:58 2011 4 4 19
201104042014z000305422 305422 3 KY 21 17 1 0 0 0.000 0.000 ... 0 0 0 2011-04-04-14:14:00 4/4/2011 14:14 4/4/2011 20:14 2011 4 4 20
201104042016z000305423 305423 3 KY 21 18 0 0 0 0.000 0.000 ... 0 0 0 2011-04-04-14:16:00 4/4/2011 14:16 4/4/2011 20:16 2011 4 4 20
201104042043z000282592 282592 3 LA 22 22 2 1 0 4.002 0.000 ... 0 0 0 2011-04-04-14:43:00 4/4/2011 14:43 4/4/2011 20:43 2011 4 4 20
201104042103z000282179 282179 3 KY 21 19 1 0 0 0.200 0.000 ... 0 0 0 2011-04-04-15:03:00 4/4/2011 15:03 4/4/2011 21:03 2011 4 4 21
201104042142z000283006 283006 3 MS 28 16 1 0 0 0.020 0.100 ... 0 0 0 2011-04-04-15:42:00 4/4/2011 15:42 4/4/2011 21:42 2011 4 4 21
201104042221z000284379 284379 3 KY 21 20 1 0 0 0.010 0.000 ... 0 0 0 2011-04-04-16:21:00 4/4/2011 16:21 4/4/2011 22:21 2011 4 4 22
201104042236z000282981 282981 3 MS 28 17 1 0 0 0.550 0.000 ... 0 0 0 2011-04-04-16:36:00 4/4/2011 16:36 4/4/2011 22:36 2011 4 4 22
201104042236z000287675 287675 3 TN 47 16 0 0 0 0.010 0.000 ... 0 0 0 2011-04-04-16:36:00 4/4/2011 16:36 4/4/2011 22:36 2011 4 4 22
201104042248z000283274 283274 3 MS 28 18 1 0 0 501.000 0.000 ... 0 0 0 2011-04-04-16:48:00 4/4/2011 16:48 4/4/2011 22:48 2011 4 4 22
201104042340z000292240 292240 3 LA 22 23 1 0 0 0.030 0.000 ... 0 0 0 2011-04-04-17:40:00 4/4/2011 17:40 4/4/2011 23:40 2011 4 4 23
201104042342z000292243 292243 3 LA 22 24 1 0 0 0.010 0.000 ... 0 0 0 2011-04-04-17:42:00 4/4/2011 17:42 4/4/2011 23:42 2011 4 4 23
201104042350z000292244 292244 3 LA 22 25 0 0 0 0.050 0.000 ... 0 0 0 2011-04-04-17:50:00 4/4/2011 17:50 4/4/2011 23:50 2011 4 4 23
201104050001z000292247 292247 3 LA 22 26 1 0 0 0.050 0.000 ... 0 0 0 2011-04-04-18:01:00 4/4/2011 18:01 4/5/2011 0:01 2011 4 5 0
201104050043z000296165 296165 3 MS 28 19 1 0 0 0.500 0.000 ... 0 0 0 2011-04-04-18:43:00 4/4/2011 18:43 4/5/2011 0:43 2011 4 5 0
201104050043z000292569 292569 3 MS 28 20 1 0 0 0.030 0.000 ... 0 0 0 2011-04-04-18:43:00 4/4/2011 18:43 4/5/2011 0:43 2011 4 5 0
201104050133z000294213 294213 3 GA 13 9 1 0 0 1.000 0.000 ... 0 0 0 2011-04-04-19:33:00 4/4/2011 19:33 4/5/2011 1:33 2011 4 5 1
201104050134z000294216 294216 3 GA 13 10 0 0 0 0.500 0.000 ... 0 0 0 2011-04-04-19:34:00 4/4/2011 19:34 4/5/2011 1:34 2011 4 5 1
201104050145z000292578 292578 3 MS 28 21 1 0 0 0.035 0.000 ... 0 0 0 2011-04-04-19:45:00 4/4/2011 19:45 4/5/2011 1:45 2011 4 5 1
201104050525z000299701 299701 3 NC 37 4 1 0 0 1.000 0.000 ... 0 0 0 2011-04-04-23:25:00 4/4/2011 23:25 4/5/2011 5:25 2011 4 5 5
201104050530z000295301 295301 3 GA 13 11 1 0 0 0.300 0.000 ... 0 0 0 2011-04-04-23:30:00 4/4/2011 23:30 4/5/2011 5:30 2011 4 5 5
201104050639z000295351 295351 3 GA 13 12 2 2 1 0.150 0.000 ... 0 0 0 2011-04-05-00:39:00 4/5/2011 0:39 4/5/2011 6:39 2011 4 5 6
201104050848z000301093 301093 3 MD 24 1 0 0 0 0.005 0.000 ... 0 0 0 2011-04-05-02:48:00 4/5/2011 2:48 4/5/2011 8:48 2011 4 5 8
201104050855z000301094 301094 3 MD 24 2 0 0 0 0.004 0.000 ... 0 0 0 2011-04-05-02:55:00 4/5/2011 2:55 4/5/2011 8:55 2011 4 5 8

46 rows × 31 columns

Pass the uids into the function

In [5]:
loc = request_images(df_subset.index.values, "../data/tor")

This returns a dictionary of the id and file location

In [6]:
loc
Out[6]:
{'201104041310z000282671': '../data/tor/2011/201104041310z000282671.png',
 '201104041338z000282673': '../data/tor/2011/201104041338z000282673.png',
 '201104041340z000282676': '../data/tor/2011/201104041340z000282676.png',
 '201104041350z000282677': '../data/tor/2011/201104041350z000282677.png',
 '201104041408z000282156': '../data/tor/2011/201104041408z000282156.png',
 '201104041428z000282678': '../data/tor/2011/201104041428z000282678.png',
 '201104041512z000282679': '../data/tor/2011/201104041512z000282679.png',
 '201104041518z000288324': '../data/tor/2011/201104041518z000288324.png',
 '201104041520z000288327': '../data/tor/2011/201104041520z000288327.png',
 '201104041530z000288329': '../data/tor/2011/201104041530z000288329.png',
 '201104041655z000288318': '../data/tor/2011/201104041655z000288318.png',
 '201104041704z000288319': '../data/tor/2011/201104041704z000288319.png',
 '201104041726z000305375': '../data/tor/2011/201104041726z000305375.png',
 '201104041738z000305379': '../data/tor/2011/201104041738z000305379.png',
 '201104041741z000305381': '../data/tor/2011/201104041741z000305381.png',
 '201104041819z000302177': '../data/tor/2011/201104041819z000302177.png',
 '201104041833z000302179': '../data/tor/2011/201104041833z000302179.png',
 '201104041852z000282770': '../data/tor/2011/201104041852z000282770.png',
 '201104041920z000318243': '../data/tor/2011/201104041920z000318243.png',
 '201104041942z000282666': '../data/tor/2011/201104041942z000282666.png',
 '201104041946z000289753': '../data/tor/2011/201104041946z000289753.png',
 '201104041955z000305421': '../data/tor/2011/201104041955z000305421.png',
 '201104041958z000282668': '../data/tor/2011/201104041958z000282668.png',
 '201104042014z000305422': '../data/tor/2011/201104042014z000305422.png',
 '201104042016z000305423': '../data/tor/2011/201104042016z000305423.png',
 '201104042043z000282592': '../data/tor/2011/201104042043z000282592.png',
 '201104042103z000282179': '../data/tor/2011/201104042103z000282179.png',
 '201104042142z000283006': '../data/tor/2011/201104042142z000283006.png',
 '201104042221z000284379': '../data/tor/2011/201104042221z000284379.png',
 '201104042236z000282981': '../data/tor/2011/201104042236z000282981.png',
 '201104042236z000287675': '../data/tor/2011/201104042236z000287675.png',
 '201104042248z000283274': '../data/tor/2011/201104042248z000283274.png',
 '201104042340z000292240': '../data/tor/2011/201104042340z000292240.png',
 '201104042342z000292243': '../data/tor/2011/201104042342z000292243.png',
 '201104042350z000292244': '../data/tor/2011/201104042350z000292244.png',
 '201104050001z000292247': '../data/tor/2011/201104050001z000292247.png',
 '201104050043z000296165': '../data/tor/2011/201104050043z000296165.png',
 '201104050043z000292569': '../data/tor/2011/201104050043z000292569.png',
 '201104050133z000294213': '../data/tor/2011/201104050133z000294213.png',
 '201104050134z000294216': '../data/tor/2011/201104050134z000294216.png',
 '201104050145z000292578': '../data/tor/2011/201104050145z000292578.png',
 '201104050525z000299701': '../data/tor/2011/201104050525z000299701.png',
 '201104050530z000295301': '../data/tor/2011/201104050530z000295301.png',
 '201104050639z000295351': '../data/tor/2011/201104050639z000295351.png',
 '201104050848z000301093': '../data/tor/2011/201104050848z000301093.png',
 '201104050855z000301094': '../data/tor/2011/201104050855z000301094.png'}

Read the images into a list

In [7]:
from svrimg.utils.get_images import read_image
import numpy as np

images = []

for unid, file in loc.items():
    if file != None:
        images.append(read_image(file))
        
images = np.array(images)

images.shape
Out[7]:
(46, 136, 136)

Set up the image framework

In [8]:
import matplotlib.pyplot as plt
from utils.map_helper import draw_box_plot
%matplotlib inline

plt.rcParams['figure.figsize'] = 25, 25
plt.rcParams['xtick.labelsize'] = 20
plt.rcParams['ytick.labelsize'] = 20
plt.rcParams['axes.labelsize'] = 20

ax = plt.subplot(2,3,1)
ax = draw_box_plot(ax, images[0])

Calculate the mean, median, and probability matched mean for all of the images

In [9]:
from svrimg.utils.pmmean import _run_pmm_one_variable

img_mean = np.mean(images, axis=0)
img_median = np.median(images, axis=0)
img_pmm = _run_pmm_one_variable(images)

Plot the results

In [10]:
plt.rcParams['figure.figsize'] = 25, 25
plt.rcParams['xtick.labelsize'] = 20
plt.rcParams['ytick.labelsize'] = 20
plt.rcParams['axes.labelsize'] = 20

ax = plt.subplot(2,3,1)
ax.set_title("Mean", fontsize=20)
ax = draw_box_plot(ax, img_mean)

ax = plt.subplot(2,3,2)
ax.set_title("Median", fontsize=20)
ax = draw_box_plot(ax, img_median)

ax = plt.subplot(2,3,3)
ax.set_title("PMM", fontsize=20)
ax = draw_box_plot(ax, img_pmm)

The tendencies clearly suggest a QLCS event was taking place

What about for every February vs. August

In [11]:
from svrimg.utils.get_images import get_img_list

feb = df_svrgis[df_svrgis.mo==2].copy()
feb_imgs = get_img_list(feb.index.values, data_dir="../data/tor/")
feb_mean = np.mean(feb_imgs, axis=0)
feb_median = np.median(feb_imgs, axis=0)
feb_pmm = _run_pmm_one_variable(feb_imgs)

aug = df_svrgis[df_svrgis.mo==8].copy()
aug_imgs = get_img_list(aug.index.values, data_dir="../data/tor/")
aug_mean = np.mean(aug_imgs, axis=0)
aug_median = np.median(aug_imgs, axis=0)
aug_pmm = _run_pmm_one_variable(aug_imgs)
HTTP Error 404: Not Found ../data/tor//2000/200002231835z000000030.png
HTTP Error 404: Not Found ../data/tor//2004/200402080240z000000723.png
HTTP Error 404: Not Found ../data/tor//2004/200402280830z000000724.png
HTTP Error 404: Not Found ../data/tor//2009/200902112305z000149420.png
HTTP Error 404: Not Found ../data/tor//2011/201102120015z000277086.png
200002231835z000000030  is missing an image file. Did not insert blank image because keep_missing is False.
200402080240z000000723  is missing an image file. Did not insert blank image because keep_missing is False.
200402280830z000000724  is missing an image file. Did not insert blank image because keep_missing is False.
200902112305z000149420  is missing an image file. Did not insert blank image because keep_missing is False.
201102120015z000277086  is missing an image file. Did not insert blank image because keep_missing is False.
HTTP Error 404: Not Found ../data/tor//2000/200008252200z000000499.png
HTTP Error 404: Not Found ../data/tor//2007/200708061820z000053883.png
HTTP Error 404: Not Found ../data/tor//2009/200908252030z000200491.png
HTTP Error 404: Not Found ../data/tor//2011/201108071735z000340522.png
200008252200z000000499  is missing an image file. Did not insert blank image because keep_missing is False.
200708061820z000053883  is missing an image file. Did not insert blank image because keep_missing is False.
200908252030z000200491  is missing an image file. Did not insert blank image because keep_missing is False.
201108071735z000340522  is missing an image file. Did not insert blank image because keep_missing is False.

Plot the results

In [12]:
plt.rcParams['figure.figsize'] = 25, 25
plt.rcParams['xtick.labelsize'] = 20
plt.rcParams['ytick.labelsize'] = 20
plt.rcParams['axes.labelsize'] = 20

ax = plt.subplot(2,3,1)
ax.set_title("February Mean", fontsize=20)
ax = draw_box_plot(ax, feb_mean)

ax = plt.subplot(2,3,2)
ax.set_title("February Median", fontsize=20)
ax = draw_box_plot(ax, feb_median)

ax = plt.subplot(2,3,3)
ax.set_title("February PMM", fontsize=20)
ax = draw_box_plot(ax, feb_pmm)

ax = plt.subplot(2,3,4)
ax.set_title("August Mean", fontsize=20)
ax = draw_box_plot(ax, aug_mean)

ax = plt.subplot(2,3,5)
ax.set_title("August Median", fontsize=20)
ax = draw_box_plot(ax, aug_median)

ax = plt.subplot(2,3,6)
ax.set_title("August PMM", fontsize=20)
ax = draw_box_plot(ax, aug_pmm)

plt.tight_layout()

This illustrates the more compact nature of convective coverage near tornado reports in August compared to February.

What about seasonal?

In [13]:
from svrimg.utils.get_images import get_img_list

djf = df_svrgis[df_svrgis.mo.isin([12, 1, 2])].copy()
djf_imgs = get_img_list(djf.index.values, data_dir="../data/tor/")
djf_mean = np.mean(djf_imgs, axis=0)
djf_median = np.median(djf_imgs, axis=0)
djf_pmm = _run_pmm_one_variable(djf_imgs)

mam = df_svrgis[df_svrgis.mo.isin([3, 4, 5])].copy()
mam_imgs = get_img_list(mam.index.values, data_dir="../data/tor/")
mam_mean = np.mean(mam_imgs, axis=0)
mam_median = np.median(mam_imgs, axis=0)
mam_pmm = _run_pmm_one_variable(mam_imgs)
                
jja = df_svrgis[df_svrgis.mo.isin([6, 7, 8])].copy()
jja_imgs = get_img_list(jja.index.values, data_dir="../data/tor/")
jja_mean = np.mean(jja_imgs, axis=0)
jja_median = np.median(jja_imgs, axis=0)
jja_pmm = _run_pmm_one_variable(jja_imgs)

son = df_svrgis[df_svrgis.mo.isin([9, 10, 11])].copy()
son_imgs = get_img_list(son.index.values, data_dir="../data/tor/")
son_mean = np.mean(son_imgs, axis=0)
son_median = np.median(son_imgs, axis=0)
son_pmm = _run_pmm_one_variable(son_imgs)
HTTP Error 404: Not Found ../data/tor//2000/200002231835z000000030.png
HTTP Error 404: Not Found ../data/tor//2004/200401252345z000000725.png
HTTP Error 404: Not Found ../data/tor//2004/200402080240z000000723.png
HTTP Error 404: Not Found ../data/tor//2004/200402280830z000000724.png
HTTP Error 404: Not Found ../data/tor//2005/200501090650z000000007.png
HTTP Error 404: Not Found ../data/tor//2005/200512050156z000000555.png
HTTP Error 404: Not Found ../data/tor//2008/200812132250z000144604.png
HTTP Error 404: Not Found ../data/tor//2009/200902112305z000149420.png
HTTP Error 404: Not Found ../data/tor//2011/201102120015z000277086.png
200002231835z000000030  is missing an image file. Did not insert blank image because keep_missing is False.
200401252345z000000725  is missing an image file. Did not insert blank image because keep_missing is False.
200402080240z000000723  is missing an image file. Did not insert blank image because keep_missing is False.
200402280830z000000724  is missing an image file. Did not insert blank image because keep_missing is False.
200501090650z000000007  is missing an image file. Did not insert blank image because keep_missing is False.
200512050156z000000555  is missing an image file. Did not insert blank image because keep_missing is False.
200812132250z000144604  is missing an image file. Did not insert blank image because keep_missing is False.
200902112305z000149420  is missing an image file. Did not insert blank image because keep_missing is False.
201102120015z000277086  is missing an image file. Did not insert blank image because keep_missing is False.
HTTP Error 404: Not Found ../data/tor//2002/200203250055z000000015.png
HTTP Error 404: Not Found ../data/tor//2006/200603230735z000000169.png
HTTP Error 404: Not Found ../data/tor//2006/200603260250z000000171.png
HTTP Error 404: Not Found ../data/tor//2012/201203091710z000365991.png
HTTP Error 404: Not Found ../data/tor//2015/201504240056z000565974.png
HTTP Error 404: Not Found ../data/tor//2017/201703261900z000614822.png
200203250055z000000015  is missing an image file. Did not insert blank image because keep_missing is False.
200603230735z000000169  is missing an image file. Did not insert blank image because keep_missing is False.
200603260250z000000171  is missing an image file. Did not insert blank image because keep_missing is False.
201203091710z000365991  is missing an image file. Did not insert blank image because keep_missing is False.
201504240056z000565974  is missing an image file. Did not insert blank image because keep_missing is False.
201703261900z000614822  is missing an image file. Did not insert blank image because keep_missing is False.
HTTP Error 404: Not Found ../data/tor//1996/199607082100z000000838.png
HTTP Error 404: Not Found ../data/tor//1999/199907201815z000000572.png
HTTP Error 404: Not Found ../data/tor//2000/200008252200z000000499.png
HTTP Error 404: Not Found ../data/tor//2001/200106032110z000000206.png
HTTP Error 404: Not Found ../data/tor//2004/200406150300z000000081.png
HTTP Error 404: Not Found ../data/tor//2004/200406190230z000000082.png
HTTP Error 404: Not Found ../data/tor//2005/200506221820z000000198.png
HTTP Error 404: Not Found ../data/tor//2005/200507260230z000000165.png
HTTP Error 404: Not Found ../data/tor//2006/200606151836z000000637.png
HTTP Error 404: Not Found ../data/tor//2007/200708061820z000053883.png
HTTP Error 404: Not Found ../data/tor//2009/200908252030z000200491.png
HTTP Error 404: Not Found ../data/tor//2011/201108071735z000340522.png
199607082100z000000838  is missing an image file. Did not insert blank image because keep_missing is False.
199907201815z000000572  is missing an image file. Did not insert blank image because keep_missing is False.
200008252200z000000499  is missing an image file. Did not insert blank image because keep_missing is False.
200106032110z000000206  is missing an image file. Did not insert blank image because keep_missing is False.
200406150300z000000081  is missing an image file. Did not insert blank image because keep_missing is False.
200406190230z000000082  is missing an image file. Did not insert blank image because keep_missing is False.
200506221820z000000198  is missing an image file. Did not insert blank image because keep_missing is False.
200507260230z000000165  is missing an image file. Did not insert blank image because keep_missing is False.
200606151836z000000637  is missing an image file. Did not insert blank image because keep_missing is False.
200708061820z000053883  is missing an image file. Did not insert blank image because keep_missing is False.
200908252030z000200491  is missing an image file. Did not insert blank image because keep_missing is False.
201108071735z000340522  is missing an image file. Did not insert blank image because keep_missing is False.
HTTP Error 404: Not Found ../data/tor//1999/199909061855z000000648.png
HTTP Error 404: Not Found ../data/tor//1999/199909082030z000000649.png
HTTP Error 404: Not Found ../data/tor//2002/200210041850z000000344.png
HTTP Error 404: Not Found ../data/tor//2004/200410162217z000000628.png
HTTP Error 404: Not Found ../data/tor//2008/200809240027z000130336.png
HTTP Error 404: Not Found ../data/tor//2012/201209131910z000414693.png
HTTP Error 404: Not Found ../data/tor//2013/201310011843z000480399.png
HTTP Error 404: Not Found ../data/tor//2016/201611181910z000614402.png
199909061855z000000648  is missing an image file. Did not insert blank image because keep_missing is False.
199909082030z000000649  is missing an image file. Did not insert blank image because keep_missing is False.
200210041850z000000344  is missing an image file. Did not insert blank image because keep_missing is False.
200410162217z000000628  is missing an image file. Did not insert blank image because keep_missing is False.
200809240027z000130336  is missing an image file. Did not insert blank image because keep_missing is False.
201209131910z000414693  is missing an image file. Did not insert blank image because keep_missing is False.
201310011843z000480399  is missing an image file. Did not insert blank image because keep_missing is False.
201611181910z000614402  is missing an image file. Did not insert blank image because keep_missing is False.
In [14]:
ax = plt.subplot(2,2,1)
ax.set_title("DJF PMean", fontsize=20)
ax = draw_box_plot(ax, djf_pmm)

ax = plt.subplot(2,2,2)
ax.set_title("MAM PMean", fontsize=20)
ax = draw_box_plot(ax, mam_pmm)

ax = plt.subplot(2,2,3)
ax.set_title("JJA PMean", fontsize=20)
ax = draw_box_plot(ax, jja_pmm)

ax = plt.subplot(2,2,4)
ax.set_title("SON PMean", fontsize=20)
ax = draw_box_plot(ax, son_pmm)