如何在 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:元组索引超出范围”?
在 Python2.7 中忽略没有 continue 语句的 IndexError
IndexError: list index out of range ,同时在python的列表中查找第一个不连续的数字