title: Cartopy - Use of "populated_places" NaturalEarthFeature display on Matplotlib map
body: <p>I'm working on a map that needs the reference points and labels of city's names and state's names (Brazil and Colombia).  From the web image in Natural Earth page seams that the feature "populated_places" will give me what I need.  I just need to know how to work with it.</p>
  
  <p>In code I have the following:</p>
  
  <pre><code>import cartopy.feature as cf
  pop = cf.NaturalEarthFeature(category='cultural',
        name='populated_places', 
        scale='10m', 
        facecolor='none')    
  </code></pre>
  
  <p>This part looks like is working because is not given me any error or warning.  </p>
  
  <hr>
  
  <p>After that I try to plot it in my map using:<br>
  <code>ax1.scatter('pop.LATITUDE', 'pop.LONGITUDE', projection=ccrs.PlateCarree())</code></p>
  
  <h2>I got an attributeError as follow:</h2>
  
  <pre><code>AttributeError                            Traceback (most recent call last)
  &lt;ipython-input-4-47ca7f66b91e&gt; in &lt;module&gt;
       19 ax1.add_feature(stt, edgecolor='black',facecolor='none')
       20 ax1.add_feature(stt_prv, linewidth=0.5, edgecolor='gray')
  ---&gt; 21 ax1.scatter('pop.LATITUDE', 'pop.LONGITUDE', projection=ccrs.PlateCarree())
       22 
       23 # ax1.add_feature(cartopy.feature.LAND)
  
  C:\ProgramData\Anaconda3\lib\site-packages\cartopy\mpl\geoaxes.py in scatter(self, *args, **kwargs)
     1435                              '(PlateCarree or RotatedPole).')
     1436 
  -&gt; 1437         result = matplotlib.axes.Axes.scatter(self, *args, **kwargs)
     1438         self.autoscale_view()
     1439         return result
  
  C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, data, *args, **kwargs)
     1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
     1809                         RuntimeWarning, stacklevel=2)
  -&gt; 1810             return func(ax, *args, **kwargs)
     1811 
     1812         inner.__doc__ = _add_data_doc(inner.__doc__,
  
  C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)
     4298                 )
     4299         collection.set_transform(mtransforms.IdentityTransform())
  -&gt; 4300         collection.update(kwargs)
     4301 
     4302         if colors is None:
  
  C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\artist.py in update(self, props)
      914 
      915         with cbook._setattr_cm(self, eventson=False):
  --&gt; 916             ret = [_update_property(self, k, v) for k, v in props.items()]
      917 
      918         if len(ret):
  
  C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\artist.py in &lt;listcomp&gt;(.0)
      914 
      915         with cbook._setattr_cm(self, eventson=False):
  --&gt; 916             ret = [_update_property(self, k, v) for k, v in props.items()]
      917 
      918         if len(ret):
  
  C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\artist.py in _update_property(self, k, v)
      910                 func = getattr(self, 'set_' + k, None)
      911                 if not callable(func):
  --&gt; 912                     raise AttributeError('Unknown property %s' % k)
      913                 return func(v)
      914 
  
  AttributeError: Unknown property projection
  </code></pre>
  
  <h2>This is an edit on Jul 24, 2019</h2>
  
  <p>Here is a code that goes into the right plotting direction.</p>
  
  <pre><code>%matplotlib inline
  import matplotlib.pyplot as plt
  import cartopy
  import cartopy.crs as ccrs
  import cartopy.feature as cf
  import cartopy.io.shapereader as shpr
  
  # Retriving the information from web
  stt = cf.NaturalEarthFeature(category='cultural', 
      name='admin_0_boundary_lines_land',
      scale='10m',facecolor='none')
  stt_prv = cf.NaturalEarthFeature(category='cultural', 
      name='admin_1_states_provinces_lines',
      scale='10m',facecolor='none')
  fname = shpr.natural_earth(resolution='10m', category='cultural', name='populated_places')
  reader = shpr.Reader(fname)
  
  # Image desing
  fig = plt.figure(figsize=(15, 6))
  
  # Main Map
  ax = fig.add_subplot(1, 5, (1,4), projection=ccrs.PlateCarree())
  ax.set_title('Populated places of the world', fontsize=16)
  ax.coastlines()
  points = list(reader.geometries())
  ax.scatter([point.x for point in points],
             [point.y for point in points],
             transform=ccrs.PlateCarree(),
             s=0.1, c='r')
  ax.add_feature(stt, linewidth=0.2, edgecolor='black')
  
  # Brazil Map
  ax = fig.add_subplot(2, 5, 5, projection=ccrs.PlateCarree())
  ax.set_extent([-74, -34, -30, 6.1])
  ax.set_title('Populated places of BRA', fontsize=8)
  ax.coastlines()
  points = list(reader.geometries())
  ax.scatter([point.x for point in points],
             [point.y for point in points],
             transform=ccrs.PlateCarree(),
             marker='p',s=10, c='r')
  ax.add_feature(stt,     linewidth=0.5, edgecolor='black')
  ax.add_feature(stt_prv, linewidth=0.2, edgecolor='black')
  
  # Colombia Map
  ax = fig.add_subplot(2, 5, 10, projection=ccrs.PlateCarree())
  ax.set_extent([-65, -80, -5, 13])
  ax.set_title('Populated places of COL', fontsize=8)
  ax.coastlines()
  points = list(reader.geometries())
  ax.scatter([point.x for point in points],
             [point.y for point in points],
             transform=ccrs.PlateCarree(),
             marker='p',s=10, c='r')
  ax.add_feature(stt,     linewidth=0.5, edgecolor='black', zorder=0)
  ax.add_feature(stt_prv, linewidth=0.2, edgecolor='black', zorder=5)
  
  plt.show()
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/0xL6l.png" rel="nofollow noreferrer">Result of previous code</a></p>