#!/usr/bin/python import colorsys import cPickle as pickle import Image FILENAME = 'heathrow.dat' IMGNAME = 'heathrow.png' def LoadData(): f = file( FILENAME ) info = pickle.load( f ) f.close() return info def FlattenYear( year ): days = [] for month in year: days += month # lolz! kill the leap day... return days[:365] def Lerp( a, b, t ): return [ (aa - t*(aa-bb)) for aa,bb in zip(a,b) ] def C( hsv ): return tuple( [int(comp * 255) for comp in colorsys.hsv_to_rgb(*hsv)] ) def ColourForDay( day ): # temp t = day['temp'] if not t: return (120, 120, 120) l = max( min( ( t + 5.0 ) / ( 5.0 + 30.0 ), 1 ), 0 ) return C( Lerp( (241.0/360, 0.7, 0.8), (0.0/360, 0.7, 0.8), l ) ) # rainfall p = day['precip'] if not p: p = 0.0 g = int(max( 255 - p*10, 0 ) ) return (g,g,g) def main(): climate = LoadData() climate = climate.items() climate.sort() img = Image.new( 'RGB', (365,len(climate)) ) for y,ydata in enumerate(climate): year,months = ydata days = FlattenYear( months ) for x,day in enumerate( days ): img.putpixel( (x,y), ColourForDay( day ) ) img.save( IMGNAME ) img.show() if __name__ == '__main__': main()