'Python plotly Scattermapbox define colors by category
I want to draw some colored areas on a map. The coordinates are defined in a dataframe and I want each area to have a different color depending on the test_type
value.
How can I do this? (Question is similar to a previous unanswered post)
import numpy as np
import pandas as pd
import plotly.graph_objects as go
# my test dataset
df = pd.DataFrame(data={'names':['area1','area2','area3'], 'coords': 0})
df['coords'] = df['coords'].astype(object)
df.at[0,'coords'] = [[-73.606352888, 45.507489991], [-73.606133883, 45.50687600], [-73.617533258, 45.527512253], [-73.618074188, 45.526759105], [-73.618271651, 45.526500673], [-73.618446320, 45.526287943], [-73.620201713, 45.524298907], [-73.620775593, 45.523650879]]
df.at[1,'coords'] = [[-73.706352888, 45.507489991], [-73.706133883, 45.50687600], [-73.717533258, 45.527512253], [-73.718074188, 45.526759105], [-73.718271651, 45.526500673], [-73.718446320, 45.526287943], [-73.720201713, 45.524298907], [-73.720775593, 45.523650879]]
df.at[2,'coords'] = [[-73.606352888, 45.497489991], [-73.606133883, 45.49687600], [-73.617533258, 45.517512253], [-73.618074188, 45.516759105], [-73.618271651, 45.516500673], [-73.618446320, 45.516287943], [-73.620201713, 45.514298907], [-73.620775593, 45.513650879]]
df['test_type'] = ['alpha','beta','beta']
def get_close_coords(coords):
# points must define a closed area
c = np.zeros((len(coords) + 1, 2))
c[:-1, :] = coords
c[-1, :] = c[0, :]
return c
fig = go.Figure(go.Scattermapbox(mode = "markers", lon = [-73.605], lat = [45.51]))
for i, c in enumerate(df.coords):
coords = get_close_coords(c)
fig.add_trace(go.Scattermapbox(lat=coords[:, 1], lon=coords[:, 0], color=df.test_type[i], mode="lines", fill="toself", name="Area %s" % i, opacity=0.4))
fig.update_layout(
mapbox = {
'style': "stamen-terrain",
'center': {'lon': -73.6, 'lat': 45.5},
'zoom': 12,
'color': df.test_type,
},
margin = {'l':0, 'r':0, 'b':0, 't':0})
fig.show()
Solution 1:[1]
First, the color setting is not simply a color specification, but a marker attribute, which is set by the marker specification in the scattermapbox
. Then the color value must be an rgb value, hex color value, or color name. For this purpose, a column of colors to be referenced is added to the original data.
fig = go.Figure(go.Scattermapbox(mode="markers", lon=[-73.605], lat=[45.51]))
for i, c in enumerate(df.coords):
coords = get_close_coords(c)
fig.add_trace(go.Scattermapbox(lat=[x[1] for x in coords],
lon=[x[0] for x in coords],
mode="lines",
marker=go.scattermapbox.Marker(
color=df.test_type_color[i]
),
fill="toself",
name="Area %s" % i,
opacity=0.4
))
fig.update_layout(
mapbox = {
'style': "stamen-terrain",
'center': {'lon': -73.6, 'lat': 45.5},
'zoom': 11,
#'color': df.test_type,
},
margin = {'l':0, 'r':0, 'b':0, 't':0})
fig.show()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | r-beginners |