在 Matplotlib/Cartopy 中制作颜色条图例

Posted

技术标签:

【中文标题】在 Matplotlib/Cartopy 中制作颜色条图例【英文标题】:Make colorbar legend in Matplotlib/Cartopy 【发布时间】:2017-05-08 13:47:11 【问题描述】:

我使用 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 图,有文档可以这样做,但我不知道如何通过 cartopy 来做到这一点,其中轴是 GeoAxesSubplot。任何添加图例的帮助将不胜感激。

我还希望了解哪些库最适合此类地理热图的提示。接下来我必须制作美国用户的热图,而 cartopy 似乎不是最好的选择。谢谢!

【问题讨论】:

【参考方案1】:

我认为add_geometries() 返回一个FeatureArtist,而不是一些可以传递给colorbar() 的Matplotlib 可映射对象。我能想到的最简单的解决方案是创建自己的可映射对象并使用它来创建颜色条。尝试将这些行放在您的 country 循环之后:

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

顺便说一句,这种地理热图称为choropleth map。

【讨论】:

以上是关于在 Matplotlib/Cartopy 中制作颜色条图例的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib+cartopy+geopandas,实现专业地图可视化!

matplotlib+cartopy+geopandas,实现专业地图可视化!

matplotlib+cartopy+geopandas,实现专业地图可视化!

第五章 相关分析 第七组作业

怎么用编程猫制作夜空

书单|可以提高男生颜值的7本书(入门篇)