Scatter Maps with Plotly and Mapbox

The Case Study

This example uses a sample of Sri Lankan police station data to map which police stations were attacked by rebel groups in the 1971 revolt. The codes for this map are simple but useful for small amounts of data. The final product is here: https://plot.ly/~wdeng1/165.embed. You can also see my codes on GitHub.

Mapping

Getting ready:

import plotly.plotly as py
from plotly.graph_objs import *

mapbox_access_token = '...' # replace with your token

Import the data:

data = Data([
 Scattermapbox(
 lat=[8.3512634, 7.9181144, 7.198902499999999, 7.142363900000001, 7.154055199999999, 7.3573265],
 lon=[81.00699279999999, 80.2404959, 80.26001, 80.10377209999999, 80.05937519999999, 80.9539475],
 mode='markers', name='Attacked but not abandoned', 
 marker=Marker(
 size=6, color='black',
 ), 
 text=['Kantalai', 'Ambanpola', 'Kamburupitiya', 'Nittambuwa', 'Veyangoda', 'Hasalaka'],
 ), 
Scattermapbox(
 lat=[6.866667, 6.0025371, 7.2193917, 7.409660799999999, 6.4345732, 9.7006168],
 lon=[80.716667, 80.369516, 81.8497567, 80.60979499999999, 80.0003875, 80.0026139000000],
 mode='markers', name='Not attacked or abandoned', 
 marker=Marker(
 size=6, color='green',
 ), 
 text=['Kantalai', 'Ambanpola', 'Kamburupitiya', 'Nittambuwa', 'Veyangoda', 'Hasalaka'],
 ), 
Scattermapbox(
 lat=[6.349044, 6.3461, 8.1657207, 6.4142105, 7.2268033],
 lon=[80.0978637, 80.5515, 80.1964443, 81.3344408, 80.1958755],
 mode='markers', name = "Abandoned because overrun",
 marker=Marker(
 size=6, color='blue',
 ), 
 text=['Uragaha', 'Deniyaya', 'Rajangana', 'Kataragama', 'Warakapola'],
 ),
Scattermapbox(
 lat=[8.042241800000001, 8.2921338, 6.2879969000000004, 8.150533, 8.8340998, 8.032214699999999],
 lon=[80.94664399999999, 80.71728370000001, 80.1596041, 80.97898199999999, 80.7607389, 80.7519272],
 mode='markers', name = "Attacked and abandoned for strategic reasons",
 marker=Marker(
 size=6, color='red',
 ), 
 text=['Hingurakgoda', 'Galenbindunuwewa', 'Elpitiya', 'Medirigiriya', 'Padaviya', 'Habarana']
 ),

Scattermapbox(
 lat=[8.821385000000001, 8.4054142, 7.4321630999999995, 7.5156351, 7.6239144, 7.746386099999999],
 lon=[81.0947808, 81.0973818, 80.4437781, 80.50418409999999, 80.2433145, 80.1316927],
 mode='markers', name = "Not attacked but abandoned for strategic reasons",
 marker=Marker(
 size=6, color='gold',
 ), 
 text=['Kuchchaveli', 'Vanela', 'Mawathagama', 'Rambodagalla', 'Wariyapola', 'Nikaweratiya'],
 )
])

Mapping:

 layout = Layout(title='Police Station Attacks and Abandonment in Sri Lanka (1971)',
 autosize=False,
 hovermode='closest', orientation="portrait", width=1100, height=1000, 
 mapbox=dict(
 accesstoken=mapbox_access_token,
 bearing=0, 
 center=dict(
 lat=7.9,
 lon=80.5
 ),
 pitch=0,
 zoom=7,
 style='streets'
 ),
) 
fig = dict(data=data, layout=layout)
py.iplot(fig, filename='Multiple Mapbox')

The final product would look something like the picture below. If you have more data, you can also set up empty lists and then use the pandas append function to append data to those lists, then use an “if” loop to append colors to a colors list.

Screenshot 2017-08-03 16.52.27

1 Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s