2016-12-22 4 views
6

Я сделал географическую Heatmap использованием cartopy и Matplotlib, числа пользователей моего приложения, но у меня возникают проблемы с добавлением Colorbar легенды:Сделать Colorbar легендой в Matplotlib/Cartopy

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) 

, который производит enter image description here

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

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

ответ

4

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

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

choropleth with colorbar

Incidently, этот вид географической Тепловой карты называется choropleth map.

Смежные вопросы