1

I'm coloring the entities of a GeoDataFrame by the column 'Color'. This column has been created to plot the different continents with different colors, so all the countries belonging to the same continent have the same value in this column.

enter image description here

Besides, I'd like to add a legend to the plot that reflects the different continents.

I thought that this could be done indicating too the column to plot and the column from which to pick the color, but since geopandas.plot() specify what follows, I do not know how to achieve it:

legend: bool (default False) Plot a legend. Ignored if no column is given, or if color is given.

I understand then that plotting entities by a color column and adding a legend seems not to be compatible in a geopandas plot. So, does exist another way of doing this?

Here I show an example based on one of the geopandas datasets:

# Creating geoDataFrame
gdf = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
gdf.sort_values(['continent'], inplace=True)

color_dict = {'Africa':'orange', 'Antarctica':'white', 'Asia':'pink', 
              'Europe':'green', 'North America':'brown',
              'Oceania':'blue', 'Seven seas (open ocean)':'gray',
              'South America':'red'}

gdf['Color'] = gdf['continent'].map(color_dict)

Plotting based on the column 'Color':

fig, ax = plt.subplots(figsize=(15,10))
gdf.plot(column='continent', color=gdf['Color'], legend=True, ax=ax)
plt.axis('off')

enter image description here I have already tried to indicate the color as a list once I've specified the column 'continent', but it has no effects on the plot:

gdf.plot(column='continent', color=gdf['Color'].unique().tolist(),
         legend=True, ax=ax)

What I'm seeking is that the following would work:

gdf.plot(column='continent', color=gdf['Color'],
         legend=True, ax=ax)
0

1 Answer 1

3

This can be achieved by defining cmap

import matplotlib.pyplot as plt
import geopandas as gpd
import matplotlib.colors as colors

# Creating geoDataFrame
gdf = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))

color_dict = {'Africa':'orange', 'Antarctica':'white', 'Asia':'pink', 
              'Europe':'green', 'North America':'brown',
              'Oceania':'blue', 'Seven seas (open ocean)':'gray',
              'South America':'red'}


fig, ax = plt.subplots(figsize=(15,10))
gdf.plot(ax=ax, column="continent", legend=True, cmap=colors.ListedColormap(list(color_dict.values())))
plt.axis('off')

enter image description here

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.