2014-01-21 30 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