如何在 Python 中调试“IndexError:标量变量的无效索引”错误?

Posted

技术标签:

【中文标题】如何在 Python 中调试“IndexError:标量变量的无效索引”错误?【英文标题】:How to debug a "IndexError: invalid index to scalar variable" error in Python? 【发布时间】:2020-11-11 15:07:03 【问题描述】:

这是我的代码:

import matplotlib.patches as pat
oval = pat.Ellipse(v1_mean,v2_mean,v1_std*2,v2_std*2)

fig,graph = plt.subplots()
graph.scatter(v1,v2)
graph.scatter(v1_mean,v2_mean, s=100)
graph.text(v1_mean,v2_mean, 'Mean')
graph.add_patch(oval)

这就是随之而来的错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-40-2278a0e6f4cf> in <module>()
      7 graph.scatter(v1_mean,v2_mean, s=100)
      8 graph.text(v1_mean,v2_mean, 'Mean')
----> 9 graph.add_patch(oval)
     10 
     11 graph.xlabel('V1')

/opt/conda/lib/python3.6/site-packages/matplotlib/axes/_base.py in add_patch(self, p)
   2033         if p.get_clip_path() is None:
   2034             p.set_clip_path(self.patch)
-> 2035         self._update_patch_limits(p)
   2036         self.patches.append(p)
   2037         p._remove_method = lambda h: self.patches.remove(h)

/opt/conda/lib/python3.6/site-packages/matplotlib/axes/_base.py in _update_patch_limits(self, patch)
   2053         vertices = patch.get_path().vertices
   2054         if vertices.size > 0:
-> 2055             xys = patch.get_patch_transform().transform(vertices)
   2056             if patch.get_data_transform() != self.transData:
   2057                 patch_to_data = (patch.get_data_transform() -

/opt/conda/lib/python3.6/site-packages/matplotlib/patches.py in get_patch_transform(self)
   1492 
   1493     def get_patch_transform(self):
-> 1494         self._recompute_transform()
   1495         return self._patch_transform
   1496 

/opt/conda/lib/python3.6/site-packages/matplotlib/patches.py in _recompute_transform(self)
   1476                  not directly access the transformation member variable.
   1477         """
-> 1478         center = (self.convert_xunits(self.center[0]),
   1479                   self.convert_yunits(self.center[1]))
   1480         width = self.convert_xunits(self.width)

IndexError: invalid index to scalar variable.

基本上,我要做的是将椭圆形和一些数据绘制到同一个图表中。但似乎错误与椭圆的中心有关,但我不知道到底出了什么问题。奇怪的是我完全按照老师的做法,但我的却出现了错误,而他的还可以。

【问题讨论】:

【参考方案1】:

奇怪的是我完全按照老师的做法,但是我的却出现了错误,而他的还可以。

可能你没有完全按照。根据matplotlib.patches.Ellipse 的文档,椭圆中心的 xy 坐标 将作为元组而不是单个参数给出,所以它不是

oval = pat.Ellipse(v1_mean,v2_mean,v1_std*2,v2_std*2)

但是

oval = pat.Ellipse((v1_mean, v2_mean), v1_std*2, v2_std*2)

相反。不幸的是,Ellipse 没有对此发出警告,而是存储了一个数字作为椭圆中心。

【讨论】:

成功了!!非常感谢你的帮助!我终于能够解决困扰我数周的问题了,哈哈

以上是关于如何在 Python 中调试“IndexError:标量变量的无效索引”错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中修复“IndexError:元组索引超出范围”?

Python - 索引错误 - 列表索引超出范围

IndexError - 使用Python 3.4.3

读取串口回复时出现IndexError [重复]

在 Python2.7 中忽略没有 continue 语句的 IndexError

IndexError: list index out of range ,同时在python的列表中查找第一个不连续的数字