使用Python在地图上可视化数据

时间:2014-01-21 03:29:46

标签: python visualization

我想创建一个中国省级人口的热图,我在这里找到了类似问题http://sensitivecities.com/so-youd-like-to-make-a-map-using-python-EN.html#.Ut3k7bS-thF的指南。

我通过示例代码没有问题,但我不得不承认我并没有完全理解它们。但是当我试图通过使用中国的shapefile来模仿这个例子时,代码运行正常,直到下面的

在[6]中:

df_map = pd.DataFrame({
    'poly': [Polygon(xy) for xy in m.china],
    'ward_name': [ward['NAME'] for ward in m.china_info]})

它会生成一个错误

ValueError:LinearRing必须至少有3个坐标元组

有人可以向我解释导致此错误的原因吗?

1 个答案:

答案 0 :(得分:2)

在报告错误时,通常最好在问题中包含完整的错误消息。 Python回溯包含的信息多于最终错误消息,包括发生错误的模块和行号。

您的错误发生在shapely代码中。我可以通过传递Polygon一个只有两个点的序列来重现错误消息; Polygon至少需要三分。这是一个例子。

从整齐的库中导入Polygon

>>> from shapely.geometry import Polygon

传递三个点的序列有效:

>>> p = Polygon([(0, 0), (0, 1), (1, 1)])

但只给出两分导致错误:

>>> p = Polygon([(0, 0), (0, 1)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 229, in __init__
    self._geom, self._ndim = geos_polygon_from_py(shell, holes)
  File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 445, in geos_polygon_from_py
    geos_shell, ndim = geos_linearring_from_py(shell)
  File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 393, in geos_linearring_from_py
    "A LinearRing must have at least 3 coordinate tuples")
ValueError: A LinearRing must have at least 3 coordinate tuples

显然,m.china中有一项少于三分的项目。您正在使用ipython,因此您可以在尝试创建m.china之前打印df_map。这应该可以帮助您确定发生了什么。