字典值无法正确追加及Matplotlib动态绘图无折线、数据单值问题求助
解决Matplotlib动画无折线及列表/字典数据丢失问题
先说说你的Matplotlib动画问题
你代码里的核心问题太典型了——每次调用animate函数时,xs和ys都是在函数内部重新创建的空列表!这就意味着每次动画更新,你都只存了当前这一组x和y值,之前的数据全丢了,所以plot的时候只能画出一个孤立的点,自然看不到折线。
修正方法很简单:把xs、ys这两个用来存历史数据的列表移到函数外面,让它们在动画的整个生命周期里保持存在,每次只追加新值就行。修改后的代码如下:
import matplotlib.pyplot as plt import matplotlib.animation as animation from random import randint fig = plt.figure() ax1 = fig.add_subplot(1,1,1) # 把数据列表放在函数外部,保存所有历史数据 xs = [] ys = [] xvalue = 0 def yaxis(): return randint(1,10) def animate(i): global xvalue, xs, ys yvalue = yaxis() xvalue += 1 xs.append(xvalue) ys.append(yvalue) ax1.clear() ax1.plot(xs, ys) # 把interval调大到100,不然动画更新太快看不清 ani = animation.FuncAnimation(fig, animate, interval=100) plt.show()
这样每次调用animate时,都会往已有的列表里追加新的坐标,plot的时候就能用全部历史数据画出连续的折线了。
再说说字典值无法正确追加的问题
虽然你没贴字典相关的代码,但大概率也是类似的逻辑错误:比如每次操作字典时都重新创建了空字典,或者没有正确找到要追加值的键。举个正确的示例:
如果想给字典的某个键对应的列表追加元素,要先确保这个键的初始值是列表,然后直接调用append:
# 正确的字典值追加示例 my_data_dict = {"values": []} def add_value_to_dict(new_value): my_data_dict["values"].append(new_value) # 测试追加 add_value_to_dict(3) add_value_to_dict(7) print(my_data_dict["values"]) # 会输出 [3, 7]
要是你每次操作都重新定义my_data_dict = {},那之前存的数据肯定会丢失,和你列表遇到的问题本质是一样的。
内容的提问来源于stack exchange,提问作者Scott Binkley
相关产品推荐
相关产品推荐

