in analysis/webservice/plotting.py [0:0]
def createLatLonTimeAverageMap(res, meta, startTime=None, endTime=None):
latSeries = [m[0]['lat'] for m in res][::-1]
lonSeries = [m['lon'] for m in res[0]]
data = np.zeros((len(latSeries), len(lonSeries)))
for t in range(0, len(latSeries)):
latSet = res[t]
for l in range(0, len(lonSeries)):
data[len(latSeries) - t - 1][l] = latSet[l]['avg']
def yFormatter(y, pos):
if y < len(latSeries):
return '%s $^\circ$' % (int(latSeries[int(y)] * 100.0) / 100.)
else:
return ""
def xFormatter(x, pos):
if x < len(lonSeries):
return "%s $^\circ$" % (int(lonSeries[int(x)] * 100.0) / 100.)
else:
return ""
data[data == 0.0] = np.nan
fig, ax = plt.subplots()
fig.set_size_inches(11.0, 8.5)
cmap = cm.coolwarm
ls = LightSource(315, 45)
masked_array = np.ma.array(data, mask=np.isnan(data))
rgb = ls.shade(masked_array, cmap)
cax = ax.imshow(rgb, interpolation='nearest', cmap=cmap)
ax.yaxis.set_major_formatter(FuncFormatter(yFormatter))
ax.xaxis.set_major_formatter(FuncFormatter(xFormatter))
title = meta['title']
source = meta['source']
if startTime is not None and endTime is not None:
if type(startTime) is not datetime.datetime:
startTime = datetime.datetime.fromtimestamp(startTime / 1000)
if type(endTime) is not datetime.datetime:
endTime = datetime.datetime.fromtimestamp(endTime / 1000)
dateRange = "%s - %s" % (startTime.strftime('%b %Y'), endTime.strftime('%b %Y'))
else:
dateRange = ""
ax.set_title("%s\n%s\n%s" % (title, source, dateRange))
ax.set_ylabel('Latitude')
ax.set_xlabel('Longitude')
fig.colorbar(cax)
fig.autofmt_xdate()
sio = StringIO()
plt.savefig(sio, format='png')
return sio.getvalue()