Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,根据线段的索引绘制线段列表_Python_Matplotlib - Fatal编程技术网

在python中,根据线段的索引绘制线段列表

在python中,根据线段的索引绘制线段列表,python,matplotlib,Python,Matplotlib,给定一个顶点列表和一个线段列表(指线段顶点的索引),绘制可能不形成连续直线的所有线段的最佳方法是什么 我可以这样做,但它显然很笨重;有更好的办法吗 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]

给定一个顶点列表和一个线段列表(指线段顶点的索引),绘制可能不形成连续直线的所有线段的最佳方法是什么

我可以这样做,但它显然很笨重;有更好的办法吗

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')

@仙人掌女人给出了一种有效的方法。这是完整的代码

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()

我不知道这是否更好,但你可以压缩你的顶点和分段,然后像这样循环

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

我不知道这是否更好,但您可以像这样压缩顶点和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

这可能是一个更具python风格的解决方案:

for v1,v2 in segs:
    x,y = zip(vertices[v1],vertices[v2])
    plot(x,y,'k')

假设我明白你想做什么。因为它们不一定是连续的,所以我认为您必须迭代
分段
,并单独绘制它们,不管发生什么。

这可能是一个更具python风格的解决方案:

for v1,v2 in segs:
    x,y = zip(vertices[v1],vertices[v2])
    plot(x,y,'k')

假设我明白你想做什么。因为它们不一定是连续的,所以我认为您必须迭代
分段
,并单独绘制它们。

为此,您可能需要
lineCollection
。给它一个元组列表,其中每个元组是一个顶点,每个列表包含一段的所有顶点

lines = [[tuple(vertices[j]) for j in i]for i in segs]

lc = matplotlib.collections.LineCollection(lines)

然后使用
add_collection
将其添加到轴中。

您可能需要
lineCollection
。给它一个元组列表,其中每个元组是一个顶点,每个列表包含一段的所有顶点

lines = [[tuple(vertices[j]) for j in i]for i in segs]

lc = matplotlib.collections.LineCollection(lines)

然后使用
add\u collection
将其添加到轴。

您的代码不起作用,因为只有三个顶点,但最后一个线段引用了第四个顶点。
segs
中的值是否假设引用顶点?对不起,这是一个输入错误。我的实际数据是一个有许多数字的浮动列表。固定的。我给了一个错误的印象,认为有和顶点相同数量的线段。你的代码不起作用,因为只有三个顶点,但最后一个线段引用了第四个顶点。
segs
中的值是否假设引用顶点?对不起,这是一个输入错误。我的实际数据是一个有许多数字的浮动列表。固定的。我给人一个错误的印象,那就是有和顶点一样多的线段,这样可以节省一条线。这可能是最好的解决方案,但是仙人掌女人的解决方案看起来很有趣,如果可行的话。这样做可以节省一行代码。这可能是最好的解决方案,但CactusWoman的解决方案看起来很有趣,如果它能奏效的话。@pheon抱歉,我修复了代码(我在错误的地方调用了元组)。现在应该可以了。如果有很多行,使用行集合要比绘制单个行快得多,但如果行数很少,则无所谓。是否需要调用
tuple
?这只是将一个2元素列表转换成一个2元素元组,似乎没有严格的必要(但我不能在这个comp上测试)。@o_o是的,似乎
LineCollection
需要一个元组列表。我更新了代码,但仍然缺少最后一行。@pheon对我来说很好,它可以绘制所有三行。你确定你的轴在正确的范围内吗?@pheon抱歉,我修复了代码(我在错误的地方调用了元组)。现在应该可以了。如果有很多行,使用行集合要比绘制单个行快得多,但如果行数很少,则无所谓。是否需要调用
tuple
?这只是将一个2元素列表转换成一个2元素元组,似乎没有严格的必要(但我不能在这个comp上测试)。@o_o是的,似乎
LineCollection
需要一个元组列表。我更新了代码,但仍然缺少最后一行。@pheon对我来说很好,它可以绘制所有三行。你确定你的轴在正确的范围内吗?