In [1]:
%run basics
%matplotlib
import xlrd
from matplotlib.patches import Polygon


Using matplotlib backend: Qt4Agg

In [2]:
def get_data_xlsheet(sheet,frow,label):
    header = sheet.row_values(frow-1)
    col = header.index(label)
    lrow = int(sheet.nrows)
    a = numpy.array(active_sheet.col_values(col)[frow:lrow])
    idx = numpy.where(~numpy.isnan(a)&(a!=-9999))[0]
    return a[idx]

In [3]:
def colour_boxes(ax,bp,data,nsites,nalts):
    boxColors = {1:['darkkhaki'],2:['darkkhaki','royalblue'],
                 3:['red','darkkhaki','royalblue']}
    numBoxes = nsites*nalts
    medians = list(range(numBoxes))
    for i in range(numBoxes):
        box = bp['boxes'][i]
        boxX = []
        boxY = []
        for j in range(5):
            boxX.append(box.get_xdata()[j])
            boxY.append(box.get_ydata()[j])
        boxCoords = list(zip(boxX, boxY))
        # Alternate between Dark Khaki and Royal Blue
        k = i % nalts
        boxPolygon = Polygon(boxCoords, facecolor=boxColors[nalts][k])
        ax.add_patch(boxPolygon)
        # Now draw the median lines back over what we just filled in
        med = bp['medians'][i]
        medianX = []
        medianY = []
        for j in range(2):
            medianX.append(med.get_xdata()[j])
            medianY.append(med.get_ydata()[j])
            ax.plot(medianX, medianY, 'k')
            medians[i] = medianY[0]

In [4]:
def create_site_dict(FluxNet_ID):
    d = {"FluxNet_ID":FluxNet_ID,
        "Fsd":{"access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
               "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Fld":{"access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
               "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Fn":{"access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Fg":{"access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Sws":{"access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
               "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Ts":{"access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Ta":{"aws":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Ah":{"aws":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}},
        "Ws":{"aws":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "access":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]},
              "erai":{"RMSE":[],"r":[],"Var ratio":[],"Bias":[]}}}
    return d

In [5]:
# make a dictionary of sites ...
sites = {"Calperum":{"FluxNet_ID":"AU-Cpr"},
         "CumberlandPlains":{"FluxNet_ID":"AU-Cum"},
         "DalyUncleared":{"FluxNet_ID":"AU-DaS"},
         "Gingin":{"FluxNet_ID":"AU-Gin"},
         "HowardSprings":{"FluxNet_ID":"AU-How"},
         "SturtPlains":{"FluxNet_ID":"AU-Stp"},
         "Tumbarumba":{"FluxNet_ID":"AU-Tum"},
         "Whroo":{"FluxNet_ID":"AU-Whr"},
         "WombatStateForest":{"FluxNet_ID":"AU-Wom"}}
# ... and a dictionary for the data
data = {}
for site in sites.keys():
    data[site] = create_site_dict(sites[site]["FluxNet_ID"])

In [6]:
site_name_list = data.keys()
site_name_list.sort()
nsites = len(site_name_list)

In [8]:
# read the data from the L4 summary spreadsheet
frow = 10
for site in site_name_list:
    xl_path = "../Docs/SpecialIssue_2014/OzFluxDataPath/Data/L4_statistics/"
    xl_name = xl_path+site+"_L4_AlternateStats.xls"
    xl_book = xlrd.open_workbook(xl_name)
    # get data from access and erai
    for var in ["Fsd","Fld","Fn","Fg","Sws","Ts"]:
        for alt in ["access","erai"]:
            sheet_name = var+"_"+alt
            active_sheet = xl_book.sheet_by_name(sheet_name)
            for item in ["RMSE","r","Var ratio","Bias"]:
                data[site][var][alt][item] = get_data_xlsheet(active_sheet,frow,item)
    # get data from aws, access and erai
    for var in ["Ta","Ah","Ws"]:
        for alt in ["aws","access","erai"]:
            sheet_name = var+"_"+alt
            active_sheet = xl_book.sheet_by_name(sheet_name)
            for item in ["RMSE","r","Var ratio","Bias"]:
                data[site][var][alt][item] = get_data_xlsheet(active_sheet,frow,item)

In [9]:
# Fsd plot
# shuffle the data
variables = {"Fsd":{"title":"Incoming shortwave radiation",
                    "units":"W/m2",
                    "alt_list":["access","erai"]},
             "Fld":{"title":"Incoming longwave radiation",
                    "units":"W/m2",
                    "alt_list":["access","erai"]},
             "Fn":{"title":"Net radiation",
                   "units":"W/m2",
                   "alt_list":["access","erai"]},
             "Fg":{"title":"Ground heat flux",
                   "units":"W/m2",
                   "alt_list":["access","erai"]},
             "Sws":{"title":"Soil water content",
                    "units":"frac",
                    "alt_list":["access","erai"]},
             "Ts":{"title":"Soil temperature",
                   "units":"C",
                   "alt_list":["access","erai"]},
             "Ta":{"title":"Air Temperature",
                    "units":"C",
                    "alt_list":["aws","access","erai"]},
             "Ah":{"title":"Absolute humidity",
                    "units":"g/m3",
                    "alt_list":["aws","access","erai"]},
             "Ws":{"title":"Wind speed",
                    "units":"m/s",
                    "alt_list":["aws","access","erai"]}}
boxprops = dict(linestyle='-',color='black')
for var in variables.keys():
    rmse = []; r =[]; var_ratio = []; bias = []
    xlabels_site = []
    nalts = len(variables[var]["alt_list"])
    minor_ticks = [x+0.5 for x in range(nalts,nalts*nsites,nalts)]
    for site in site_name_list:
        for alt in variables[var]["alt_list"]:
            xlabels_site.append(data[site]["FluxNet_ID"])
            rmse.append(data[site][var][alt]["RMSE"])
            r.append(data[site][var][alt]["r"])
            var_ratio.append(data[site][var][alt]["Var ratio"])
            bias.append(data[site][var][alt]["Bias"])
    # do the plot
    xlabels_site = ["" if i%nalts!=0 else x for i,x in enumerate(xlabels_site)]
    fig,axs = plt.subplots(4,figsize=(8,6))
    fig.canvas.set_window_title(var)
    plt.subplots_adjust(hspace=0.15)
    axs[0].set_title(variables[var]["title"])
    rmse_bp = axs[0].boxplot(rmse,boxprops=boxprops,whis=0,sym="",showcaps=False)
    ylabel = "RMSE ("+variables[var]["units"]+")"
    axs[0].set_ylabel(ylabel)
    colour_boxes(axs[0],rmse_bp,rmse,nsites,nalts)
    axs[0].set_xticks(minor_ticks, minor=True)
    axs[0].xaxis.grid(which='minor')

    r_bp = axs[1].boxplot(r,boxprops=boxprops,whis=0,sym="",showcaps=False)
    axs[1].set_ylabel("R")
    colour_boxes(axs[1],r_bp,r,nsites,nalts)
    axs[1].set_xticks(minor_ticks, minor=True)
    axs[1].xaxis.grid(which='minor')

    vr_bp = axs[2].boxplot(var_ratio,boxprops=boxprops,whis=0,sym="",showcaps=False)
    axs[2].set_ylabel("Var ratio")
    colour_boxes(axs[2],vr_bp,var_ratio,nsites,nalts)
    axs[2].set_xticks(minor_ticks, minor=True)
    axs[2].xaxis.grid(which='minor')
    axs[2].axhline(y=1,linewidth=2,linestyle=':',color='red',alpha=0.5)

    bias_bp = axs[3].boxplot(bias,boxprops=boxprops,whis=0,sym="",showcaps=False)
    ylabel = "Bias ("+variables[var]["units"]+")"
    axs[3].set_ylabel(ylabel)
    colour_boxes(axs[3],bias_bp,bias,nsites,nalts)
    axs[3].set_xticks(minor_ticks, minor=True)
    axs[3].xaxis.grid(which='minor')
    axs[3].axhline(y=0,linewidth=2,linestyle=':',color='red',alpha=0.5)

    xticklabels = axs[0].get_xticklabels()+axs[1].get_xticklabels()+axs[2].get_xticklabels()
    plt.setp(xticklabels, visible=False)
    xtickNames = plt.setp(axs[3], xticklabels=xlabels_site)
    plt.setp(xtickNames, rotation=45, fontsize=10)
    plt.show()

In [11]:
rmse


Out[11]:
[array([ 4.56573115,  2.955982  ,  1.69196058,  2.00811912,  2.72531949,
         2.33793482,  1.84238241,  3.36248049,  6.82591128,  5.84956248,
         1.44739853,  1.71598495,  5.6107423 ,  4.93115781,  3.10375672,
         1.83282935,  7.92637749,  3.05362295,  3.19088005,  4.04133971,
         7.00816829]),
 array([ 3.2279335 ,  4.51556435,  3.50490518,  2.62316635,  3.25468923,
         2.84317354,  2.29560316,  2.49728351,  3.76014471,  5.81774942,
         5.20596119,  1.65726209,  2.04815844,  5.64949341,  4.92863075,
         3.76867121,  2.49400885,  7.68234629,  3.05850409,  3.7635479 ,
         4.6730614 ]),
 array([ 1.10553616,  1.31095346,  0.97209675,  2.1087386 ,  2.493739  ,
         2.35038586,  2.65666286,  2.26820647,  1.11105083,  3.22709669,
         1.16225716,  2.40468912,  2.46611745]),
 array([ 1.19795651,  3.78734085,  1.39573449,  3.43671077,  4.13517956,
         3.78940156,  3.73955115,  3.80735903,  1.18955018,  3.7851036 ,
         1.32184413,  3.23978471]),
 array([ 2.96654768,  2.44080113,  4.47529792,  4.78908561,  3.31164297,
         1.84565187,  1.28436836,  1.42445846,  1.68544388,  1.40807266,
         2.27625929,  2.91994998,  4.07532475,  1.60635733,  2.115542  ,
         2.27433038,  2.52860119,  1.84044811,  2.34012235]),
 array([ 2.26025252,  1.72535206,  1.97098361,  6.40923082,  4.13489107,
         2.1574871 ,  2.24217742,  6.26857999,  5.95428895,  5.67096943,
         2.24997564,  6.39784077,  3.70366376,  2.20010811,  5.39341293,
         6.12926275,  4.74628709,  1.70861609,  1.1692736 ,  4.22214678,
         1.79588097,  2.62936233,  3.30376574,  3.91670432,  4.73526859,
         3.01808506,  1.55078754,  2.12982334,  2.96193219,  1.84006789,
         3.30342362]),
 array([ 1.7498268 ,  3.70981589,  1.71253401,  1.323585  ,  1.83809097,
         2.93653413,  3.04835408,  2.23738824,  5.003126  ,  5.84625277,
         2.26014354,  2.08250293,  1.805489  ,  2.63524338,  2.61228055,
         2.28886991,  2.73112015]),
 array([ 2.41530721,  7.02609152,  2.60044871,  2.65448591,  2.69289326,
         3.35019728,  7.05322165,  5.96479844,  7.92596842,  9.58818483,
         6.28372278,  5.38603311,  2.02339409,  4.5035835 ,  6.1918274 ,
         6.05843284,  2.95206684]),
 array([ 1.52157402,  1.47517504,  3.37690182,  2.87864815,  1.38940705,
         1.37136033,  2.25329155,  1.8460018 ,  1.25961752,  1.0914161 ,
         1.00594805,  2.50739815,  0.93226851,  0.75099943,  3.297561  ,
         4.58921731,  1.59059064,  1.75719109,  4.28952348,  4.33176785]),
 array([ 4.94651835,  1.43476023,  1.60908573,  2.23689636,  1.84803683,
         1.76682104,  2.12396117,  3.15388947,  1.53484783,  1.39247126,
         1.96001715,  1.32061531,  0.88326002,  0.72586955,  1.2957818 ,
         1.47360391,  1.90613625,  2.35454133,  1.61912321,  0.92759633,
         4.24007759,  2.90274779,  1.47736041,  0.76296678,  2.68954771,
         2.41937663,  1.53816875,  5.26630069,  3.15892109,  2.35017219,
         2.61331899,  5.57759354,  4.42217628,  2.40026868,  1.40395645,
         5.1318407 ,  1.80579093,  1.17720857,  1.47781564,  1.07466387,
         3.81183139,  1.12527519,  0.95549876,  4.61343295,  4.89497022,
         2.468879  ,  2.39982094,  5.51511545,  4.70774033]),
 array([ 1.9923505 ,  1.74295606,  1.57642417,  4.73446447,  2.15962842,
         1.95250791,  1.3737287 ,  4.9269577 ,  3.39877276,  2.15226344,
         2.91402168,  4.70837452,  3.35130783,  2.13352481,  1.63289787,
         3.72377084,  2.22146325,  3.44907249,  3.51103087,  5.26531097]),
 array([ 1.71393568,  1.88578005,  0.90441824,  1.26314003,  1.9922275 ,
         1.85170822,  1.0659333 ,  3.81958938,  2.07941151,  1.64581554,
         1.37230696,  3.96540538,  1.99327513,  3.06351802,  1.11637928,
         3.80453778,  3.60536522,  3.04904306,  2.98256926,  3.9978276 ,
         3.91457138,  3.23400311,  2.87350417,  3.59653059,  2.46910388,
         3.58481132,  3.60329856,  4.65533765]),
 array([ 7.04189318,  0.99273463,  1.00938526,  1.01600876,  0.84227591,
         0.92960322,  0.75177905,  0.65660742,  8.35980927,  5.68782986,
         2.58916182,  3.9453146 ,  0.70024894,  6.11204007,  2.34065773,
         3.36833984,  5.06517288]),
 array([ 0.86664703,  1.53537909,  1.2098741 ,  1.07920864,  0.76804801,
         1.04080673,  1.03563624,  3.15024908,  3.93517185,  0.70221295,
         1.01244633,  1.08313516,  0.86384638,  1.10165316,  0.7238406 ,
         2.79772325,  0.92206876,  1.24144116,  0.71856066,  0.98560296,
         4.05077368,  2.21741915,  2.13876204,  3.38654382,  0.72052746,
         2.61011721,  1.1595143 ,  3.94059284,  1.0405327 ,  1.08695332,
         0.82701674,  4.01281748,  1.15342942,  1.13010992,  1.13315941,
         1.40578099,  3.97670768,  1.22785175,  1.25208392,  1.23670078,
         0.83625415,  0.9900125 ,  0.89271847,  0.86819794,  5.39188603,
         3.34998305,  2.05891739,  3.30951846,  1.11340554,  3.88087303,
         1.99519909,  3.0224263 ,  4.49196835]),
 array([ 2.71605296,  1.16181943,  0.63386529,  1.94987402,  2.77286391,
         1.21039259,  0.80750305,  1.4656322 ,  2.62451216,  1.37760209,
         0.95982609,  1.59337356,  2.66943561,  1.85580929,  1.76927716,
         3.76908462]),
 array([ 3.02317637,  1.80357049,  0.87927064,  2.53803238,  3.25626167,
         1.94049822,  0.74301753,  1.52753119,  2.92686187,  1.2496393 ,
         0.98177108,  1.64150295,  3.50206094,  1.81122911,  1.77256703,
         2.96759105]),
 array([ 2.69364739,  1.0166894 ,  0.59841772,  1.58294883,  3.21800413,
         2.40187259,  1.0368088 ,  0.59096872,  1.10679251,  1.83196492,
         0.77949531,  0.774676  ,  1.90379546,  1.26980723,  0.79032783,
         0.53341704,  1.100311  ,  0.76013554]),
 array([ 1.09054868,  1.07791179,  2.40506505,  1.272016  ,  1.3749832 ,
         0.97459116,  2.7575386 ,  3.5058845 ,  3.70842001,  2.21598234,
         0.76383804,  1.57095181,  2.32188698,  0.90631876,  0.8995324 ,
         2.62190419,  1.52340308,  1.11993873,  0.74004229,  1.55938899,
         0.94133169])]

In [ ]: