Scatter Plots on Mapbox in Python
How to make scatter plots on Mapbox maps in Python.
New to Plotly?
Plotly is a free and open-source graphing library for Python. We recommend you read our Getting Started guide for the latest installation or upgrade instructions, then move on to our Plotly Fundamentals tutorials or dive straight in to some Basic Charts tutorials.
Mapbox Access Token and Base Map Configuration¶
To plot on Mapbox maps with Plotly you may need a Mapbox account and a public Mapbox Access Token. See our Mapbox Map Layers documentation for more information.
Basic example with Plotly Express¶
Here we show the Plotly Express function px.scatter_mapbox
for a scatter plot on a tile map.
Plotly Express is the easy-to-use, high-level interface to Plotly, which operates on a variety of types of data and produces easy-to-style figures.
import plotly.express as px
px.set_mapbox_access_token(open(".mapbox_token").read())
df = px.data.carshare()
fig = px.scatter_mapbox(df, lat="centroid_lat", lon="centroid_lon", color="peak_hour", size="car_hours",
color_continuous_scale=px.colors.cyclical.IceFire, size_max=15, zoom=10)
fig.show()
import plotly.express as px
import geopandas as gpd
geo_df = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
px.set_mapbox_access_token(open(".mapbox_token").read())
fig = px.scatter_mapbox(geo_df,
lat=geo_df.geometry.y,
lon=geo_df.geometry.x,
hover_name="name",
zoom=1)
fig.show()
Basic Example¶
import plotly.graph_objects as go
mapbox_access_token = open(".mapbox_token").read()
fig = go.Figure(go.Scattermapbox(
lat=['45.5017'],
lon=['-73.5673'],
mode='markers',
marker=go.scattermapbox.Marker(
size=14
),
text=['Montreal'],
))
fig.update_layout(
hovermode='closest',
mapbox=dict(
accesstoken=mapbox_access_token,
bearing=0,
center=go.layout.mapbox.Center(
lat=45,
lon=-73
),
pitch=0,
zoom=5
)
)
fig.show()
Multiple Markers¶
import plotly.graph_objects as go
mapbox_access_token = open(".mapbox_token").read()
fig = go.Figure(go.Scattermapbox(
lat=['38.91427','38.91538','38.91458',
'38.92239','38.93222','38.90842',
'38.91931','38.93260','38.91368',
'38.88516','38.921894','38.93206',
'38.91275'],
lon=['-77.02827','-77.02013','-77.03155',
'-77.04227','-77.02854','-77.02419',
'-77.02518','-77.03304','-77.04509',
'-76.99656','-77.042438','-77.02821',
'-77.01239'],
mode='markers',
marker=go.scattermapbox.Marker(
size=9
),
text=["The coffee bar","Bistro Bohem","Black Cat",
"Snap","Columbia Heights Coffee","Azi's Cafe",
"Blind Dog Cafe","Le Caprice","Filter",
"Peregrine","Tryst","The Coupe",
"Big Bear Cafe"],
))
fig.update_layout(
autosize=True,
hovermode='closest',
mapbox=dict(
accesstoken=mapbox_access_token,
bearing=0,
center=dict(
lat=38.92,
lon=-77.07
),
pitch=0,
zoom=10
),
)
fig.show()
Nuclear Waste Sites on Campuses¶
import plotly.graph_objects as go
import pandas as pd
mapbox_access_token = open(".mapbox_token").read()
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/Nuclear%20Waste%20Sites%20on%20American%20Campuses.csv')
site_lat = df.lat
site_lon = df.lon
locations_name = df.text
fig = go.Figure()
fig.add_trace(go.Scattermapbox(
lat=site_lat,
lon=site_lon,
mode='markers',
marker=go.scattermapbox.Marker(
size=17,
color='rgb(255, 0, 0)',
opacity=0.7
),
text=locations_name,
hoverinfo='text'
))
fig.add_trace(go.Scattermapbox(
lat=site_lat,
lon=site_lon,
mode='markers',
marker=go.scattermapbox.Marker(
size=8,
color='rgb(242, 177, 172)',
opacity=0.7
),
hoverinfo='none'
))
fig.update_layout(
title='Nuclear Waste Sites on Campus',
autosize=True,
hovermode='closest',
showlegend=False,
mapbox=dict(
accesstoken=mapbox_access_token,
bearing=0,
center=dict(
lat=38,
lon=-94
),
pitch=0,
zoom=3,
style='light'
),
)
fig.show()
import plotly.graph_objects as go
token = open(".mapbox_token").read() # you need your own token
fig = go.Figure(go.Scattermapbox(
mode = "markers+text+lines",
lon = [-75, -80, -50], lat = [45, 20, -20],
marker = {'size': 20, 'symbol': ["bus", "harbor", "airport"]},
text = ["Bus", "Harbor", "airport"],textposition = "bottom right"))
fig.update_layout(
mapbox = {
'accesstoken': token,
'style': "outdoors", 'zoom': 0.7},
showlegend = False)
fig.show()
Add Clusters¶
New in 5.11
Display clusters of data points by setting cluster
. Here, we enable clusters with enabled=True
. You can also enable clusters by setting other cluster
properties. Other available properties include color
(for setting the color of the clusters), size
(for setting the size of a cluster step), and step
(for configuring how many points it takes to create a cluster or advance to the next cluster step).
import plotly.express as px
import pandas as pd
px.set_mapbox_access_token(open(".mapbox_token").read())
df = pd.read_csv(
"https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv"
)
fig = px.scatter_mapbox(df, lat="lat", lon="long", size="cnt", zoom=3)
fig.update_traces(cluster=dict(enabled=True))
fig.show()
Reference¶
See function reference for px.(scatter_mapbox)
or https://plotly.com/python/reference/scattermapbox/ for more information and options!
What About Dash?¶
Dash is an open-source framework for building analytical applications, with no Javascript required, and it is tightly integrated with the Plotly graphing library.
Learn about how to install Dash at https://dash.plot.ly/installation.
Everywhere in this page that you see fig.show()
, you can display the same figure in a Dash application by passing it to the figure
argument of the Graph
component from the built-in dash_core_components
package like this:
import plotly.graph_objects as go # or plotly.express as px
fig = go.Figure() # or any Plotly Express function e.g. px.bar(...)
# fig.add_trace( ... )
# fig.update_layout( ... )
from dash import Dash, dcc, html
app = Dash()
app.layout = html.Div([
dcc.Graph(figure=fig)
])
app.run_server(debug=True, use_reloader=False) # Turn off reloader if inside Jupyter
