Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib
- matplotlib.use('Agg')
- from scipy.interpolate import griddata
- from mpl_toolkits.basemap import Basemap, maskoceans
- import matplotlib.pyplot as plt
- from numpy.random import seed
- import shapefile as shp
- from matplotlib.collections import LineCollection
- from matplotlib import cm
- # Set figure size
- plt.figure(figsize=(15,15), dpi=80)
- # Define map bounds
- xMin, xMax = 2.5, 8.0
- yMin, yMax = 50.6, 53.8
- # Create map
- m = Basemap(projection='merc',llcrnrlon=xMin,llcrnrlat=yMin,urcrnrlon=xMax,urcrnrlat=yMax,resolution='h')
- m.drawmapboundary(fill_color='#d4dadc',linewidth=0.25)
- # m.drawcoastlines(linewidth=0.5,color='#333333')
- # Load data
- y = [54.325666666667,52.36,53.269444444444,55.399166666667,54.116666666667,53.614444444444,53.491666666667,53.824130555556,52.918055555556,54.03694,52.139722,52.926865008825,54.853888888889,52.317222,53.240026656696,52.642696895243,53.391265948394,52.505333893732,52.098821802977,52.896643913235,52.457270486008,53.223000488316,52.701902388132,52.0548617826,53.411581103636,52.434561756559,52.749056395511,53.123676213651,52.067534268959,53.194409573306,52.27314817052,51.441334059998,51.224757511326,51.990941918858,51.447744494043,51.960667359998,51.969031121385,51.564889021961,51.857593837453,51.449772459909,51.658528382201,51.196699902606,50.905256257898,51.497306260089,yMin,yMin,yMax,yMax]
- x = [2.93575,3.3416666666667,3.6277777777778,3.8102777777778,4.0122222222222,4.9602777777778,5.9416666666667,2.9452777777778,4.1502777777778,6.04167,4.436389,4.7811453228565,4.6961111111111,4.789722,4.9207907082729,4.9787572406902,5.3458010937365,4.6029300588208,5.1797058644882,5.383478899702,5.5196324030324,5.7515738887123,5.8874461671401,5.8723225499118,6.1990994508938,6.2589770334531,6.5729701105864,6.5848470019087,6.6567253619722,7.1493220605216,6.8908745111116,3.5958241584686,3.8609657214986,4.121849767852,4.342014,4.4469005114756,4.9259216999194,4.9352386335384,5.1453989235756,5.3770039280214,5.7065946674719,5.7625447234516,5.7617834850481,6.1961067840608,xMin,xMax,xMin,xMax]
- z = [4.8,5.2,5.8,5.4,5,5.3,5.4,4.6,5.8,6.3,4.8,5.4,5.3,4.6,5.4,4.4,4.1,5.5,4.5,4.2,3.9,3.7,4.2,3.2,4,3.8,2.7,2.3,3.4,2.5,3.7,5.2,2.9,5.1,3.8,4.4,4.2,3.9,3.8,3.2,2.6,2.8,2.4,3.1]
- avg = np.average(z)
- z.extend([avg,avg,avg,avg])
- x,y = m(x,y)
- # target grid to interpolate to
- xis = np.arange(min(x),max(x),2000)
- yis = np.arange(min(y),max(y),2000)
- xi,yi = np.meshgrid(xis,yis)
- # interpolate
- zi = griddata((x,y),z,(xi,yi),method='cubic')
- # Decide on proper values for colour bar (todo)
- vrange = max(z)-min(z)
- mult = 2
- vmin = min(z)-(mult*vrange)
- vmax = max(z)+(mult*vrange)
- # Draw contours
- cs = m.contour(xi, yi, zi, 5, linewidths=0.25, colors='k')
- cs = m.contourf(xi, yi, zi, 5,vmax=vmax,vmin=vmin,cmap=plt.get_cmap('jet'))
- # Plot seas from shapefile
- sf = shp.Reader(r'/DIR_TO_SHP/shapefiles/northsea')
- shapes = sf.shapes()
- print shapes[0].parts
- records = sf.records()
- ax = plt.subplot(111)
- for record, shape in zip(records,shapes):
- lons,lats = zip(*shape.points)
- data = np.array(m(lons, lats)).T
- print len(shape.parts)
- if len(shape.parts) == 1:
- segs = [data,]
- else:
- segs = []
- for i in range(1,len(shape.parts)):
- index = shape.parts[i-1]
- index2 = shape.parts[i]
- segs.append(data[index:index2])
- segs.append(data[index2:])
- lines = LineCollection(segs,antialiaseds=(1,),zorder=3)
- lines.set_facecolors('#abc0d3')
- lines.set_edgecolors('red')
- lines.set_linewidth(0.5)
- ax.add_collection(lines)
- # Plot France from shapefile
- sf = shp.Reader(r'/DIR_TO_SHP/shapefiles/FRA_adm0')
- shapes = sf.shapes()
- records = sf.records()
- ax = plt.subplot(111)
- for record, shape in zip(records,shapes):
- lons,lats = zip(*shape.points)
- data = np.array(m(lons, lats)).T
- if len(shape.parts) == 1:
- segs = [data,]
- else:
- segs = []
- for i in range(1,len(shape.parts)):
- index = shape.parts[i-1]
- index2 = shape.parts[i]
- segs.append(data[index:index2])
- segs.append(data[index2:])
- lines = LineCollection(segs,antialiaseds=(1,))
- lines.set_facecolors('#fafaf8')
- lines.set_edgecolors('#333333')
- lines.set_linewidth(0.5)
- ax.add_collection(lines)
- # Plot Belgium from shapefile
- sf = shp.Reader(r'/DIR_TO_SHP/shapefiles/BEL_adm0')
- shapes = sf.shapes()
- records = sf.records()
- ax = plt.subplot(111)
- for record, shape in zip(records,shapes):
- lons,lats = zip(*shape.points)
- data = np.array(m(lons, lats)).T
- if len(shape.parts) == 1:
- segs = [data,]
- else:
- segs = []
- for i in range(1,len(shape.parts)):
- index = shape.parts[i-1]
- index2 = shape.parts[i]
- segs.append(data[index:index2])
- segs.append(data[index2:])
- lines = LineCollection(segs,antialiaseds=(1,))
- lines.set_facecolors('#fafaf8')
- lines.set_edgecolors('#333333')
- lines.set_linewidth(0.5)
- ax.add_collection(lines)
- # Plot Germany from shapefile
- sf = shp.Reader(r'/DIR_TO_SHP/shapefiles/DEU_adm0')
- shapes = sf.shapes()
- records = sf.records()
- ax = plt.subplot(111)
- for record, shape in zip(records,shapes):
- lons,lats = zip(*shape.points)
- data = np.array(m(lons, lats)).T
- if len(shape.parts) == 1:
- segs = [data,]
- else:
- segs = []
- for i in range(1,len(shape.parts)):
- index = shape.parts[i-1]
- index2 = shape.parts[i]
- segs.append(data[index:index2])
- segs.append(data[index2:])
- lines = LineCollection(segs,antialiaseds=(1,))
- lines.set_facecolors('#fafaf8')
- lines.set_edgecolors('#333333')
- lines.set_linewidth(0.5)
- ax.add_collection(lines)
- # Finish plot
- plt.axis('off')
- plt.savefig("test2.png",bbox_inches='tight',pad_inches=0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement