En un mapa hexagonal (hexbin map o hexagonal tile map) cada región se representa con un hexágono del mismo tamaño, colocado aproximadamente en su posición geográfica. A diferencia de un mapa normal, las regiones pequeñas tienen el mismo peso visual que las grandes. Los ejemplos utilizan un archivo GeoJSON con un hexágono por cada estado de Estados Unidos y el número de colonias de abejas de cada estado.
Lee el archivo GeoJSON con geopandas, proyéctalo a Web Mercator (EPSG 3857) para que los hexágonos sean regulares y dibújalo con plot.
import geopandas as gpd
import matplotlib.pyplot as plt
hexmap = gpd.read_file("https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/us_states_hexgrid.geojson.json")
hexmap = hexmap.to_crs(epsg = 3857)
fig, ax = plt.subplots()
hexmap.plot(ax = ax, color = "#A8DADC", edgecolor = "white", linewidth = 2)
ax.axis("off")
# plt.show()

Escribe la abreviatura de cada estado, guardada en la columna iso3166_2, en el centro de su hexágono.
import geopandas as gpd
import matplotlib.pyplot as plt
hexmap = gpd.read_file("https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/us_states_hexgrid.geojson.json")
hexmap = hexmap.to_crs(epsg = 3857)
fig, ax = plt.subplots()
hexmap.plot(ax = ax, color = "#457B9D", edgecolor = "white", linewidth = 2)
for geom, label in zip(hexmap.geometry, hexmap["iso3166_2"]):
ax.annotate(label, (geom.centroid.x, geom.centroid.y), ha = "center", va = "center",
color = "white", fontsize = 7)
ax.axis("off")
# plt.show()

Pasa una columna numérica a column para colorear cada hexágono. En este caso, el número de colonias de abejas de cada estado.
import geopandas as gpd
import matplotlib.pyplot as plt
hexmap = gpd.read_file("https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/us_states_hexgrid.geojson.json")
hexmap = hexmap.to_crs(epsg = 3857)
fig, ax = plt.subplots()
hexmap.plot(column = "bees", cmap = "YlOrBr", edgecolor = "white", linewidth = 2,
legend = True, legend_kwds = {"label": "Colonias de abejas", "orientation": "horizontal", "shrink": 0.6}, ax = ax)
for geom, label in zip(hexmap.geometry, hexmap["iso3166_2"]):
ax.annotate(label, (geom.centroid.x, geom.centroid.y), ha = "center", va = "center", fontsize = 6)
ax.axis("off")
# plt.show()

Consulta también cómo crear un mapa de coropletas con geopandas, que utiliza la forma real de las regiones.
También te puede interesar