How to draw a line on tile-based maps in Python with Plotly.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Sign up for early access now.
Lines on tile maps using Plotly Express¶To draw a line on a map, you either can use px.line_map
in Plotly Express, or go.Scattermap
in Plotly Graph Objects. Here's an example of drawing a line on a tile-based map using Plotly Express.
In [1]:
import pandas as pd us_cities = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv") us_cities = us_cities.query("State in ['New York', 'Ohio']") import plotly.express as px fig = px.line_map(us_cities, lat="lat", lon="lon", color="State", zoom=3, height=300) fig.update_layout(map_style="open-street-map", map_zoom=4, map_center_lat = 41, margin={"r":0,"t":0,"l":0,"b":0}) fig.show()Lines on maps from GeoPandas¶
Given a GeoPandas geo-data frame with linestring
or multilinestring
features, one can extra point data and use px.line_map
.
In [2]:
import plotly.express as px import geopandas as gpd import shapely.geometry import numpy as np import wget # download a zipped shapefile wget.download("https://plotly.github.io/datasets/ne_50m_rivers_lake_centerlines.zip") # open a zipped shapefile with the zip:// pseudo-protocol geo_df = gpd.read_file("zip://ne_50m_rivers_lake_centerlines.zip") lats = [] lons = [] names = [] for feature, name in zip(geo_df.geometry, geo_df.name): if isinstance(feature, shapely.geometry.linestring.LineString): linestrings = [feature] elif isinstance(feature, shapely.geometry.multilinestring.MultiLineString): linestrings = feature.geoms else: continue for linestring in linestrings: x, y = linestring.xy lats = np.append(lats, y) lons = np.append(lons, x) names = np.append(names, [name]*len(y)) lats = np.append(lats, None) lons = np.append(lons, None) names = np.append(names, None) fig = px.line_map(lat=lats, lon=lons, hover_name=names, map_style="open-street-map", zoom=1) fig.show()Lines on maps using
Scattermap
traces¶
This example uses go.Scattermap
and sets the mode attribute to a combination of markers and line.
In [3]:
import plotly.graph_objects as go fig = go.Figure(go.Scattermap( mode = "markers+lines", lon = [10, 20, 30], lat = [10, 20,30], marker = {'size': 10})) fig.add_trace(go.Scattermap( mode = "markers+lines", lon = [-50, -60,40], lat = [30, 10, -20], marker = {'size': 10})) fig.update_layout( margin ={'l':0,'t':0,'b':0,'r':0}, map = { 'center': {'lon': 10, 'lat': 10}, 'style': "open-street-map", 'center': {'lon': -20, 'lat': -20}, 'zoom': 1}) fig.show()Mapbox Maps¶
Mapbox traces are deprecated and may be removed in a future version of Plotly.py.
The earlier examples using px.line_map
and go.Scattermap
use Maplibre for rendering. These traces were introduced in Plotly.py 5.24 and are now the recommended way to draw lines on tile-based maps. There are also traces that use Mapbox: px.line_mapbox
and go.Scattermapbox
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.
To draw a line on your map, you either can use px.line_mapbox
in Plotly Express, or Scattermapbox
traces. Below we show you how to draw a line on Mapbox using Plotly Express.
Here's an example of using Scattermapbox
.
In [4]:
import plotly.graph_objects as go fig = go.Figure(go.Scattermapbox( mode = "markers+lines", lon = [10, 20, 30], lat = [10, 20,30], marker = {'size': 10})) fig.add_trace(go.Scattermapbox( mode = "markers+lines", lon = [-50, -60,40], lat = [30, 10, -20], marker = {'size': 10})) fig.update_layout( margin ={'l':0,'t':0,'b':0,'r':0}, mapbox = { 'center': {'lon': 10, 'lat': 10}, 'style': "open-street-map", 'center': {'lon': -20, 'lat': -20}, 'zoom': 1}) fig.show()
/tmp/ipykernel_11080/3823995118.py:3: DeprecationWarning: *scattermapbox* is deprecated! Use *scattermap* instead. Learn more at: https://plotly.com/python/mapbox-to-maplibre/ /tmp/ipykernel_11080/3823995118.py:9: DeprecationWarning: *scattermapbox* is deprecated! Use *scattermap* instead. Learn more at: https://plotly.com/python/mapbox-to-maplibre/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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4