title: Plotting shapefile using LineCollection shows all edges, but partially fills them
body: <p>For the past few days I have been trying to get weather station data interpolated in a map for my country only. I do this as follows: </p>
  
  <ul>
  <li>Loading the data, I create a grid using interpolation</li>
  <li>Based on this grid I draw a <code>contour</code> and <code>contourf</code> image</li>
  <li>I then draw shapefiles for Germany, Belgium and France on top of the map in order to cover the irrelevant <code>contour</code>/<code>contourf</code> elements. I used <a href="http://geophysique.be/2013/02/12/matplotlib-basemap-tutorial-10-shapefiles-unleached-continued/" rel="nofollow noreferrer">this tutorial</a> for that. </li>
  <li>Finally, I use an oceans shapefile (IHO Sea Areas; www.marineregions.org/downloads.php#iho) to plot as well in order to cover the North Sea. Using QGIS, I edited this oceans shapefile and removed everything except for the North Sea - given time constraints :)</li>
  </ul>
  
  <p>You would say that everything goes fine -- but for some reason parts of the country as well as the islands are interpreted as being water. I guess this is because these are distinct parts, all not connected to the main land (due to waters/rivers). </p>
  
  <p>Strangely enough, the edges are drawn, but they are not filled.</p>
  
  <p>I've tried and searched a lot but have no clue about how to fix this. I guess it is somewhere in the <code>LineCollection</code> because in QGIS the shapefile is correct (i.e. it recognizes <em>no shape</em> when clicking the islands etc., which is correct since it should only recognize a shape when clicking on the sea).
  I sincerely hope that you could help me point out where I'm wrong and how I can fix this!</p>
  
  <p>Thanks a lot!</p>
  
  <p>This is the map that I'm getting:</p>
  
  <p><a href="https://i.imgur.com/GHISN7n.png" rel="nofollow noreferrer">https://i.imgur.com/GHISN7n.png</a></p>
  
  <p>My code is as follows (<em>and you can probably see that I'm very new to this kind of programming, I started yesterday :)</em>):</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>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);</code></pre>
  </div>
  </div>
  </p>