给定一个顶点列表和一个线段列表(指向一个段顶点的索引),绘制所有线段的最佳方法是什么,它们可能不会形成连续的线?
我可以这样做,但显然很笨重;有更好的方法吗?
vertices=[[0,0],[1,1],[1,2],[4,1]]
segs=[[0,1],[0,2],[2,3]]
for seg in segs:
x = vertices[seg[0]][0], vertices[seg[1]][0]
y = vertices[seg[0]][1], vertices[seg[1]][1]
plot(x, y, 'k')
@CactusWoman提供了一种有效的方法。这是完整的代码。
import matplotlib
import matplotlib.collections
import matplotlib.pyplot
vertices=[[0,0],[1,1],[1,2],[4,1]]
segs=[[0,1],[0,2],[2,3]]
lines = [[tuple(vertices[j]) for j in i]for i in segs]
lc = matplotlib.collections.LineCollection(lines)
fig, ax = matplotlib.pyplot.subplots()
ax.add_collection(lc)
matplotlib.pyplot.xlim([0,4])
matplotlib.pyplot.ylim([0,2])
matplotlib.pyplot.show()
答案 0 :(得分:1)
这可能是更加Pythonic的解决方案:
for v1,v2 in segs:
x,y = zip(vertices[v1],vertices[v2])
plot(x,y,'k')
假设我明白你要做什么。由于它们不一定是连续的,我认为您将不得不迭代segs
并无论如何都单独绘制它们。
答案 1 :(得分:1)
你可能想要RStudio -> Preferences -> General -> Default text encoding -> Change
。给它一个元组列表的列表,其中每个元组是一个顶点,每个列表包含一个段的所有顶点。
lineCollection
然后使用lines = [[tuple(vertices[j]) for j in i]for i in segs]
lc = matplotlib.collections.LineCollection(lines)
将其添加到您的轴。
答案 2 :(得分:0)
我不知道这是否更好,但你可以压缩你的顶点和segs并像这样循环它们。
vertices=[[0,0],[0,1],[3,2]]
segs=[[0,1],[0,2],[2,3]]
for v,s in zip(vertices, segs):
x = v[0], s[0]
y = v[1], s[1]
plot(x,y,'k')
我不确定我是否完全理解您的代码,但是由于您尝试访问不存在的索引,因此会出现错误。这只是1:1的关系。索引x
顶点索引x
segs