使用python基于轮询数据为地图的区域着色

时间:2018-03-29 20:50:35

标签: python matplotlib data-visualization

所以我对python很新,但我有使用matplotlib的经验和图表的公平份额,我正在尝试制作类似于此的地图:maps of US electoral results(其中阴影表示投票强度)但对于Egypt's governates。我有关于csv的数据,我知道如何在python中解析它,我只是想知道如何在地图上显示这些数据。

不幸的是,在线地图的质量非常低,所以我可以轻松地重新绘制Photoshop。我想知道如何根据使用python的数据为每个政府着色。

我的第一直觉是在png上绘制每个政府的图片,然后根据数据为每个图像添加一个阴影,然后堆叠所有的政府图像。但这似乎很愚蠢。我显然需要对政府进行编号,这并不难,但我不知道如何以图形方式开始显示它们。

1 个答案:

答案 0 :(得分:1)

如果您可以为管理者找到合适的shapefile,那么您可以使用cartopy,它与matplotlib接口。我刚刚从this page下载了第二个文件,以便在下面使用。我注意到这些区域与链接图像中的区域不同,但它至少说明了它的工作原理。

import cartopy
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

reader = cartopy.io.shapereader.Reader('egy_admbnda_adm1_capmas_20170421.shp')

cmap = plt.get_cmap('viridis')
ax = plt.subplot(111, projection=ccrs.PlateCarree())
ax.set_extent([24, 38, 20, 33])

for i, geom in enumerate(reader.geometries()):
    ax.add_geometries([geom], ccrs.PlateCarree(), facecolor=cmap(i * 10))

plt.show()

enter image description here