Strange Plotly behaviour with Choropleth Mapbox

Viewed 128

I want to create a choropleth map out of a GeoJSON file that looks like this:

{"type": "FeatureCollection", "features": [
{'type': 'Feature', 'geometry': {'type': 'MultiPolygon', 'coordinates': [[[[... , ...] ... [..., ...]]]]}, 'properties': {'id': 'A'},
{'type': 'Feature', 'geometry': {'type': 'MultiPolygon', 'coordinates': [[[[... , ...] ... [..., ...]]]]}, 'properties': {'id': 'B'},
...
]}

with each id property being different for each feature.

I mapped each feature (by the id property) to it's particular region as it follows:

regions = {
'A': 'MOUNTAINS',
'B': 'BEACH',
...
}

and then created a DataFrame to store each id and each region:

ids = []
for feature in geojson['features']:
  ids.append(feature['properties']['id'])
df = pd.DataFrame (ids, columns = ['id'])
df['region'] = df['id'].map(regions)

That returns a DataFrame like this:

    id         region
0   A          MOUNTAIN
1   B          BEACH
2   C          PLAIN
3   D          FOREST
...

I then tried to create a choropleth map with that info:

fig = px.choropleth_mapbox(df, geojson=geojson, color="region",
                           locations="id", featureidkey="properties.id",
                           center={"lat": -9.893, "lon": -50.423},
                           mapbox_style="white-bg", zoom=9)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

However, this results in an excessively long running time, which crashes about a minute or so later, with no error.

I wanted to check if there was something wrong with the GeoJSON file and/or with the mapping, so I assigned random numeric data to each id in df, by:

df['random_number'] = np.random.randint(0,100,size=len(df))

and re-tried the map with the following code:

fig = px.choropleth_mapbox(df, geojson=geojson, color="random_number",
                           locations="id", featureidkey="properties.id",
                           center={"lat": -9.893, "lon": -50.423},
                           mapbox_style="white-bg", zoom=9)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

and it worked, so I am guessing there is some kind of trouble with the non-numeric values in the region column of df, which are not being properly passed to the choropleth map.

Any advice, help or solution will be much appreciated!

0 Answers
Related