Сделать легенду о цветных полосах в Matplotlib/Cartopy

Я сделал географическую тепловую карту, используя cartopy и matplotlib, из числа пользователей моего приложения, но у меня возникают проблемы с добавлением легенды цветовой шкалы:

import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

cmap = mpl.cm.Blues
# Countries is a dictionary of {"country_name": number of users}, for example
countries = {"United States": 100, "Canada": 50, "China": 10}

max_users = float(max(countries.values()))
shapename = 'admin_0_countries'
countries_shp = shpreader.natural_earth(resolution='110m', category='cultural', name=shapename)
ax = plt.axes(projection=ccrs.Robinson())
for country in shpreader.Reader(countries_shp).records():
    name = country.attributes['name_long']
    num_users = countries[name]
    ax.add_geometries(country.geometry, ccrs.PlateCarree(),
                facecolor=cmap(num_users/max_users, 1))

plt.savefig('iOS_heatmap.png', transparent=True, dpi=900)

который производит введите описание изображения здесь

Я хочу добавить легенду цветовой панели. Есть документация, чтобы сделать это для прямого сюжета matplotlib, но я не уверен, как это сделать с помощью картопии, где ось является GeoAxesSubplot, Любая помощь в добавлении легенды будет принята с благодарностью.

Буду также признателен за советы о том, какая библиотека лучше всего подходит для такого рода географических тепловых карт. Затем я должен составить карту пользователей в США, и картопия кажется не лучшим вариантом. Спасибо!

1 ответ

Я думаю что add_geometries() возвращает FeatureArtist а не некоторый сопоставляемый объект Matplotlib, который может быть передан colorbar(), Самое простое решение, которое я могу придумать, - это создать свой собственный маппинг и использовать его для создания цветовой панели. Попробуйте разместить эти строки после вашего country цикл:

sm = plt.cm.ScalarMappable(cmap=cmap,norm=plt.Normalize(0,1))
sm._A = []
plt.colorbar(sm,ax=ax)

хороплет с цветовой шкалой

Кстати, этот вид географической тепловой карты называется картой хороплетов.

Другие вопросы по тегам