2014-01-21 25 views
1

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

虽然我不得不承认我没有完全理解它们,但我没有遇到示例代码的问题。然而,当我试图用中国的shape文件以模仿例如,代码运行正常,直到下

在文献[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个坐标元组

有人请向我解释是什么原因导致了这个错误?

回答

2

当您报告错误时,在问题中包含完整的错误消息通常是一个好主意。 Python回溯包括比最终错误消息更多的信息,包括发生错误的模块和行号。

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

导入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中有一个项目少于三个poi NTS。您正在使用ipython,因此您可以在尝试创建df_map之前打印m.china。这应该可以帮助你确定发生了什么。

+0

谢谢沃伦。你是对的。我查了m.china名单。它有几个元素,每个元素少于三个点。但我现在可以做什么? m.china,就像m.london一样,直接从形状文件中读取。 – TheStupidOne