Python Voronoi未绘制超出范围的实时数据元组索引

Python Voronoi未绘制超出范围的实时数据元组索引,python,tuples,voronoi,index-error,Python,Tuples,Voronoi,Index Error,我试图用实时数据绘制voronoi图,但得到错误: 索引器错误:元组索引超出范围 守则: data,addr=sock.recvfrom(1024)#缓冲区大小为1024字节 data=str(data,“utf-8”)#将字节转换为字符串并修复“b” #数据解码(“utf-8”,errors=“ignore”) 数据=数据条(“”).split(“”) x=数据[0] y=数据[1] x=浮动(x.替换(',',')) y=浮动(y.替换(',',')) vor=Voronoi(x,y)

我试图用实时数据绘制voronoi图,但得到错误:

索引器错误:元组索引超出范围
守则:

data,addr=sock.recvfrom(1024)#缓冲区大小为1024字节
data=str(data,“utf-8”)#将字节转换为字符串并修复“b”
#数据解码(“utf-8”,errors=“ignore”)
数据=数据条(“”).split(“”)
x=数据[0]
y=数据[1]
x=浮动(x.替换(',','))
y=浮动(y.替换(',','))
vor=Voronoi(x,y)

数据
变量的值如下:
[b'02036377.204291',b'02027879.2040747.]


您知道如何解决此问题吗?

如评论中所述,您收到的错误是因为您将错误的输入传递给了
Voronoi
,请阅读

关于您尝试执行的操作,并假设您从
数据中获得的
数据,addr=sock.recvfrom(1024)
如下
[b'02036377.204291',b'02027879.2040747.]
您必须解决以下几点:

  • 将字节解码为字符串
  • 例如,使用正则表达式提取坐标
  • 将坐标的字符串表示形式转换为
    float
  • 组织数据结构以创建
    Voronoi
    图表
到目前为止,您使用的代码解决了其中大部分问题,但它没有将数据结构作为
Voronoi
图表的输入

下面的代码说明了所有要点,并将为您创建
Voronoi
图表:

重新导入
从scipy.spatical导入Voronoi,Voronoi_plot_2d
将matplotlib.pyplot作为plt导入
进口医生测试
doctest.testmod()#用于测试docstring
#编译用于解析输入数据的正则表达式
regex=re.compile('(\d+,\d+)\。(\d+,\d+)\。)
def解析_数据(数据):
"""
解析具有x,y坐标的字符串列表
>>>数据=[b'02036377.204291',b'02027879.2040747']
>>>解析_数据(数据)
[[0.2036377, 2.04291], [0.2027879, 2.040747]]
"""
过程数据=[]
对于数据中的i:
m=regex.match(i.decode('utf-8'))#解码字节并匹配regex
如果m:
#解析坐标并组织数据结构
proc_data+=[[float(m.group(1).替换(',',')),
浮动(m.组(2).替换(',',')]]
返回过程数据
数据=[b'02036377.204291',b'02027879.2040747',
b'02018921.2037455'、b'02010467.2034439',
b'0200407.2031721'、b'01996321.2027795',
b'01989551.2023898'、b'01983429.2020666',
b'01978466.2017263.]
数据=解析数据(数据)
vor=Voronoi(数据)#使用正确的输入数据创建Voronoi图
voronoi图2d(vor)
plt.show()
结果如下:

由于问题可能是由于对数据的错误解析造成的,您能否提供一个您试图解析的数据示例?此外,您似乎没有正确使用
Voronoi
类,因为
npoints
应该是一个数组,并且您正在传递一个浮点(即
x
)这导致
y
被用作
最远的站点
参数。请阅读第一个数据示例:(0.4175202,1.514597)(0.411608,1.510047)(0.4102539,1.509755)(0.4093362,1.510369)效果很好:
python-c“来自scipy.spatial导入Voronoi,Voronoi\u plot\u2d;导入matplotlib.pyplot作为plt;vor=Voronoi([0.4175202,1.514597],[0.411608,1.510047],[0.4102539,1.509755],[0.4093362,1.510369]];voronoi_绘图_2d(vor);plt.show()
。正如我所说,您只需要传递一个数组,在本例中,它是一个列表列表而不是元组列表。谢谢您,用这个x,y变量将元组列表转换为数组列表的最佳方法是什么?谢谢您的清晰解释和代码。当我在脚本中分开运行时,一切都很好。但在我的实时传入字节脚本我遇到一些错误:AttributeError:“int”对象没有“decode”属性。因此,这里的问题可能是代码中的数据有一个端点,而传入字节没有,因为它们处于while True循环中。您如何看待此错误以及如何解决此问题?此错误意味着在某一点上您从
sock.recvfrom(1024)
获取的数据是
int
。克服这一问题的一种方法是使用
try/except
(参见文档)并捕获您预期的任何异常,在这种情况下,数据的格式不是您预期的格式。