使用pandas将结果绘制到实际地图上

时间:2016-03-05 11:40:43

标签: python python-2.7 pandas

对于我的python知识水平来说可能是一个潜在的不可能完成的任务,但我在想是否有一种方法(可能是一个已经存在的程序)来映射包含AreaCodes列和Test Results列的数据帧的结果,该地区的实际地图。

所以我的df看起来像这样:

           PostCode Area   Test Result
0                  BN           P
1                  PE           P
2                  SO         PRS
3                  PE           P
4                  PE           F
5                  CW           P
6                  CW           F
7                   S           P
8                   S           F
9                  SW           P
10                 SW           F
11                 CM           P
12                 CM           F

PostCode区域适用于英国。我可能正在寻找类似于英国热图的东西,其中强度由“P&#P>”的数量控制

1 个答案:

答案 0 :(得分:0)

您可以使用cartopy。

pip install https://github.com/SciTools/cartopy/archive/v0.13.1.tar.gz

你需要geos,shapely和proj4,这是最简单的使用anaconda:

conda install geos proj4 shapely

我从这里下载了包含英国邮政区域的形状文件: http://www.opendoorlogistics.com/downloads/

然后您可以使用cartopy为这些区域着色:

from cartopy import crs
from cartopy.io import shapereader

import matplotlib.pyplot as plt
from matplotlib.cm import get_cmap

cmap = get_cmap('viridis')

uk_postal_areas = shapereader.Reader('Areas.shp')

ax = plt.axes(projection=crs.Mercator())

values = {
    'BA': 0.5,
    'BN': 0.1,
    'NE': 1.0,
    'IV': 0.7,
    'BT': 0.3,
}

for record in uk_postal_areas.records():
    name = record.attributes['name']
    ax.add_geometries(
            [record.geometry],
            facecolor=cmap(values.get(name, 0)),
            linewidth=0,
            crs=crs.PlateCarree(),
    )

ax.set_extent([-10, 4, 48, 61], crs=crs.PlateCarree())

plt.show()

结果

result