从数据框中绘制多个多边形

时间:2018-09-18 16:15:42

标签: python matplotlib polygon

我想为我的商店创建一个简单的地图,以显示所有不同结帐的大小。我有3种不同的耕种类型。一个大小为4,另一种大小为1。

例如
直到1-4
直到2-1
直到3-1

我已经按照以下步骤创建了一个表:

耕种大小多边形
直到1 4 [[0,1],[0,5],[1,5],[1,1]]
直到2 1 [[1,1],[1,2],[2,2],[2,1]]

ETC

运行此代码:

df1.iloc[0]['polygon']

我得到'[[[0,1],[0,5],[1,5],[1,1]]'

但是,当我尝试将其制成多边形时,就会遇到困难:

Polygon(df1.iloc[0]['polygon'], True)

TypeError:未调整大小的对象的len()

我认为它以字符串形式读取它,我需要以某种方式传递各个部分。我尝试使用split,但是它仍然是字符串列表而不是列表列表。

有什么想法吗?

最终代码类似于以下内容:

fig, ax = plt.subplots()
patches = []
num_polygons = len(df1)
for i in range(num_polygons):
    #polygon = Polygon([[1,1],[1,5],[2,5],[2,1]], True)
    polygon = Polygon(df1.iloc[0]['polygon'], True)
    patches.append(polygon)
p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4)
colors = 100*np.random.rand(len(patches))
p.set_array(np.array(colors))
ax.add_collection(p)
plt.ylim([0,10])
plt.xlim([0,10])
plt.show()

1 个答案:

答案 0 :(得分:0)

当我定义它时,它看起来像是一个字符串而不是一个列表。

所以我改变了:

df1.iloc[i, df1.columns.get_loc('polygon')] = '({x},{y}) ({x},{y1}) ({x1},{y1}) ({x1},{y})'.format(x=x,y=y,x1=x+x1,y1=y+y1)

对此:

df1.iloc[i, df1.columns.get_loc('polygon')] = [(x,y),(x,y+y1),(x+x1,y+y1),(x+x1,y)]