Scatter
Scatter Plots on Maps in Python
How to make scatter plots on maps in Python. Scatter plots on maps highlight geographic areas and can be colored by value.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Try Plotly Studio now.
In [1]:
import plotly.express as px df = px.data.gapminder().query("year == 2007") fig = px.scatter_geo(df, locations="iso_alpha", size="pop", # size of markers, "pop" is one of the columns of gapminder ) fig.show()
Customize geographical scatter plot¶
In [2]:
import plotly.express as px df = px.data.gapminder().query("year == 2007") fig = px.scatter_geo(df, locations="iso_alpha", color="continent", # which column to use to set the color of markers hover_name="country", # column added to hover information size="pop", # size of markers projection="natural earth") fig.show()
Basic Example with GeoPandas¶
px.scatter_geo can work well with GeoPandas dataframes whose geometry is of type Point.
In [3]:
import plotly.express as px import geopandas as gpd from geodatasets import get_url geo_df = gpd.read_file(get_url("naturalearth.cities")) fig = px.scatter_geo(geo_df, lat=geo_df.geometry.y, lon=geo_df.geometry.x, hover_name="name") fig.show()
U.S. Airports Map¶
Here we show how to use go.Scattergeo from plotly.graph_objects.
Simple U.S. Airports Map¶
In [4]:
import plotly.graph_objects as go import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv') df['text'] = df['airport'] + '' + df['city'] + ', ' + df['state'] + '' + 'Arrivals: ' + df['cnt'].astype(str) fig = go.Figure(data=go.Scattergeo( lon = df['long'], lat = df['lat'], text = df['text'], mode = 'markers', marker_color = df['cnt'], )) fig.update_layout( title = 'Most trafficked US airports<br>(Hover for airport names)', geo_scope='usa', ) fig.show()
Styled U.S. Airports Map¶
In [5]:
import plotly.graph_objects as go import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv') df['text'] = df['airport'] + '' + df['city'] + ', ' + df['state'] + '' + 'Arrivals: ' + df['cnt'].astype(str) fig = go.Figure(data=go.Scattergeo( locationmode = 'USA-states', lon = df['long'], lat = df['lat'], text = df['text'], mode = 'markers', marker = dict( size = 8, opacity = 0.8, reversescale = True, autocolorscale = False, symbol = 'square', line = dict( width=1, color='rgba(102, 102, 102)' ), colorscale = 'Blues', cmin = 0, color = df['cnt'], cmax = df['cnt'].max(), colorbar=dict( title=dict( text="Incoming flights<br>February 2011" ) ) ))) fig.update_layout( title = 'Most trafficked US airports<br>(Hover for airport names)', geo = dict( scope='usa', projection_type='albers usa', showland = True, landcolor = "rgb(250, 250, 250)", subunitcolor = "rgb(217, 217, 217)", countrycolor = "rgb(217, 217, 217)", countrywidth = 0.5, subunitwidth = 0.5 ), ) fig.show()
North American Precipitation Map¶
In [6]:
import plotly.graph_objects as go import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2015_06_30_precipitation.csv') scl = [0,"rgb(150,0,90)"],[0.125,"rgb(0, 0, 200)"],[0.25,"rgb(0, 25, 255)"],\ [0.375,"rgb(0, 152, 255)"],[0.5,"rgb(44, 255, 150)"],[0.625,"rgb(151, 255, 0)"],\ [0.75,"rgb(255, 234, 0)"],[0.875,"rgb(255, 111, 0)"],[1,"rgb(255, 0, 0)"] fig = go.Figure(data=go.Scattergeo( lat = df['Lat'], lon = df['Lon'], text = df['Globvalue'].astype(str) + ' inches', marker = dict( color = df['Globvalue'], colorscale = scl, reversescale = True, opacity = 0.7, size = 2, colorbar = dict( title = dict( side="right" ), outlinecolor = "rgba(68, 68, 68, 0)", ticks = "outside", showticksuffix = "last", dtick = 0.1 ) ) )) fig.update_layout( geo = dict( scope = 'north america', showland = True, landcolor = "rgb(212, 212, 212)", subunitcolor = "rgb(255, 255, 255)", countrycolor = "rgb(255, 255, 255)", showlakes = True, lakecolor = "rgb(255, 255, 255)", showsubunits = True, showcountries = True, resolution = 50, projection = dict( type = 'conic conformal', rotation_lon = -100 ), lonaxis = dict( showgrid = True, gridwidth = 0.5, range= [ -140.0, -55.0 ], dtick = 5 ), lataxis = dict ( showgrid = True, gridwidth = 0.5, range= [ 20.0, 60.0 ], dtick = 5 ) ), title=dict(text='US Precipitation 06-30-2015<br>Source: <a href="http://water.weather.gov/precip/">NOAA</a>'), ) fig.show()
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(debug=True, use_reloader=False) # Turn off reloader if inside Jupyter