def marker(self, lat, lng, **kwargs):
        '''
        Display a marker.

        Args:
            lat (float): Latitude of the marker.
            lng (float): Longitude of the marker.

        Optional:

        Args:
            color/c (str): Marker color. Can be hex ('#00FFFF'), named ('cyan'), or matplotlib-like ('c'). Defaults to red.
            title (str): Hover-over title of the marker.
            label (str): Label displayed on the marker.
            info_window (str): HTML content to be displayed in a pop-up `info window`_.
            draggable (bool): Whether or not the marker is `draggable`_. Defaults to False.
            precision (int): Number of digits after the decimal to round to for lat/lng values. Defaults to 6.

        .. _info window: https://developers.google.com/maps/documentation/javascript/infowindows
        .. _draggable: https://developers.google.com/maps/documentation/javascript/markers#draggable

        Usage::

            import gmplot
            apikey = '' # (your API key here)
            gmap = gmplot.GoogleMapPlotter(37.766956, -122.438481, 13, apikey=apikey)

            gmap.marker(37.793575, -122.464334, label='H', info_window="<a href='https://www.presidio.gov/'>The Presidio</a>")
            gmap.marker(37.768442, -122.441472, color='green', title='Buena Vista Park')
            gmap.marker(37.783333, -122.439494, precision=2, color='#FFD700')

            gmap.draw('map.html')

        .. image:: GoogleMapPlotter.marker.png
        '''
        self._markers.append(
            _Marker(lat,
                    lng,
                    _get(kwargs, ['color', 'c'], 'red'),
                    _get(kwargs, 'precision', 6),
                    title=_get(kwargs, 'title'),
                    label=_get(kwargs, 'label'),
                    info_window=_get(kwargs, 'info_window'),
                    draggable=_get(kwargs, 'draggable', False)))
    def scatter(self, lats, lngs, **kwargs):
        '''
        Plot a collection of points.

        Args:
            lats ([float]): Latitudes.
            lngs ([float]): Longitudes.

        Optional:

        Args:
            marker (bool or [bool]): True to plot points as markers, False to plot them as symbols. Defaults to True.
            title (str or [str]): Hover-over title of each point (markers only).
            label (str or [str]): Label displayed on each point (markers only).
            info_window (str or [str]): HTML content to be displayed in each point's pop-up `info window`_ (markers only).
            draggable (bool): Whether or not each point is `draggable`_ (markers only). Defaults to False.
            symbol (str or [str]): Shape of each point, as 'o', 'x', or '+' (symbols only). Defaults to 'o'.
            size/s (int or [int]): Size of each point, in meters (symbols only). Defaults to 40.
            color/c/edge_color/ec (str or [str]):
                Color of each point's edge (symbols only). Can be hex ('#00FFFF'), named ('cyan'), or matplotlib-like ('c'). Defaults to black.
            alpha/edge_alpha/ea (float or [float]):
                Opacity of each point's edge, ranging from 0 to 1 (symbols only). Defaults to 1.0.
            edge_width/ew (int or [int]): Width of each point's edge, in pixels (symbols only). Defaults to 1.
            color/c/face_color/fc (str or [str]):
                Color of each point's face. Can be hex ('#00FFFF'), named ('cyan'), or matplotlib-like ('c'). Defaults to black.
            alpha/face_alpha/fa (float or [float]):
                Opacity of each point's face, ranging from 0 to 1 (symbols only). Defaults to 0.3.
            precision (int or [int]): Number of digits after the decimal to round to for lat/lng values. Defaults to 6.

        .. _info window: https://developers.google.com/maps/documentation/javascript/infowindows
        .. _draggable: https://developers.google.com/maps/documentation/javascript/markers#draggable

        Usage::

            import gmplot
            apikey = '' # (your API key here)
            gmap = gmplot.GoogleMapPlotter(37.766956, -122.479481, 15, apikey=apikey)

            attractions = zip(*[
                (37.769901, -122.498331),
                (37.768645, -122.475328),
                (37.771478, -122.468677),
                (37.769867, -122.466102),
                (37.767187, -122.467496),
                (37.770104, -122.470436)
            ])

            gmap.scatter(
                *attractions,
                color=['red', 'orange', 'yellow', 'green', 'blue', 'purple'],
                s=60,
                ew=2,
                marker=[True, True, False, True, False, False],
                symbol=[None, None, 'o', None, 'x', '+'],
                title=['First', 'Second', None, 'Third', None, None],
                label=['A', 'B', 'C', 'D', 'E', 'F']
            )

            gmap.draw('map.html')

        .. image:: GoogleMapPlotter.scatter.png
        '''
        _validate_lat_lng_length(lats, lngs)

        OPTION_MAP = {
            'marker': ('marker', True),
            'title': ('title', ),
            'label': ('label', ),
            'info_window': ('info_window', ),
            'draggable': ('draggable', False),
            'symbol': ('symbol', 'o'),
            'size': (['size', 's'], 40),
            'edge_color': (['color', 'c', 'edge_color', 'ec'], 'black'),
            'edge_alpha': (['alpha', 'edge_alpha', 'ea'], 1.0),
            'edge_width': (['edge_width', 'ew'], 1),
            'face_color': (['color', 'c', 'face_color', 'fc'], 'black'),
            'face_alpha': (['alpha', 'face_alpha', 'fa'], 0.3),
            'precision': ('precision', 6)
        }

        # Read each option as a list:
        options = {}
        for option, info in OPTION_MAP.items():
            name, value = _get(kwargs, *info, get_key=True)
            if value is None:
                continue

            if isinstance(value, (list, tuple)):
                _validate_num_points(name, value, len(lats))
                options[option] = value

            else:
                options[option] = [value] * len(lats)

        # For each point, plot a marker or symbol with its corresponding options:
        for i, location in enumerate(zip(lats, lngs)):
            point_options = {
                option: value[i]
                for (option, value) in options.items()
            }

            if point_options.get('marker'):
                self._markers.append(
                    _Marker(location[0],
                            location[1],
                            point_options.get('face_color'),
                            point_options.get('precision'),
                            title=point_options.get('title'),
                            label=point_options.get('label'),
                            info_window=point_options.get('info_window'),
                            draggable=point_options.get('draggable')))
            else:
                self._drawables.append(
                    _Symbol(location[0],
                            location[1],
                            point_options.get('symbol'),
                            point_options.get('size'),
                            point_options.get('precision'),
                            edge_color=point_options.get('edge_color'),
                            edge_alpha=point_options.get('edge_alpha'),
                            edge_width=point_options.get('edge_width'),
                            face_color=point_options.get('face_color'),
                            face_alpha=point_options.get('face_alpha')))