Matplotlib Slider无法更新散点图报TypeError错误求助
错误原因
报错的核心问题是set_offsets()方法的传参格式不符合要求:scat是matplotlib.collections.PathCollection类的实例,它的set_offsets()方法除了实例自身隐含的self参数外,仅接受1个位置参数,要求传入形状为(N, 2)的二维结构,每一行对应一个散点的(x, y)坐标对。
你在调用时分开传入了self.X[i]和self.Y[i]两个参数,加上隐含的self,实际传入了3个位置参数,因此触发类型错误。
修正方案
将update函数中更新坐标的代码修改为将同一时刻的横、纵坐标拼接为坐标对结构即可,两种常用写法如下:
- 借助numpy拼接(如果项目已引入numpy):
import numpy as np def update(val): i = int(slider.val) # 注意如果你的X/Y列表索引从0开始,需要把i改为i-1,因为slider初始值是1 scat.set_offsets(np.column_stack((self.X[i], self.Y[i]))) fig.canvas.draw_idle()
- 原生Python写法,不需要额外依赖:
def update(val): i = int(slider.val) # 同样注意索引是否需要减1的问题 scat.set_offsets([(x, y) for x, y in zip(self.X[i], self.Y[i])]) fig.canvas.draw_idle()
额外注意事项
你当前设置的Slider取值范围是valmin=1到valmax=n,如果你的self.X和self.Y是Python标准的从0开始索引的列表,需要把i = int(slider.val)修改为i = int(slider.val) - 1,否则会出现索引越界错误。
内容的提问来源于stack exchange,提问作者Dauren Yermenov
相关产品推荐
相关产品推荐

