Matplotlib股票动态绘图代码运行报ValueError无法转字符串为浮点数
报错原因与修复方案
你遇到的
ValueError核心原因是:拆分data_date_volume.txt文件内容时,日期数据被错误分配到了成交量列表中,程序尝试把日期字符串转为浮点型时触发报错。
修复步骤
- 第一步:确认分隔符拆分逻辑是否正确
你按&&拆分文件第一行内容后,默认seperatedlst[0]是日期串、seperatedlst[1]是成交量串,实际很可能是这个顺序搞反了。可以先加两行调试代码确认拆分结果:
seperatedlst=seperated.split("&&") # 新增调试代码,打印拆分后两部分的前50个字符 print("拆分第一部分:", seperatedlst[0][:50]) print("拆分第二部分:", seperatedlst[1][:50])
如果发现第二部分是日期、第一部分是成交量,直接互换两个列表的赋值即可:
# 把原来的0和1索引互换 volumelst=seperatedlst[0].split(",") datelst=seperatedlst[1].split(",")
- 第二步:统一三类数据的长度
你当前的代码对三类数据的取数范围完全不一致,后续绘图时会触发数据长度不匹配的报错:- 成交量列表取的是
volumelst下标1到倒数第二个元素,长度比原列表少2 - 日期列表取的是
datelst下标0到倒数第三个元素,长度比原列表少2 - 收盘价列表取的是
plotprice下标0到倒数第二个元素,长度比原列表少1
需要保证三个列表长度完全相同,每个下标对应同一时间点的三类数据,参考调整如下:
- 成交量列表取的是
# 过滤空值后统一截断为最短列表的长度 lvolume = [float(x.strip()) for x in volumelst if x.strip()] ldate = [x.strip() for x in datelst if x.strip()] lprice = [float(x.strip()) for x in plotprice if x.strip()] min_length = min(len(lvolume), len(ldate), len(lprice)) lvolume, ldate, lprice = lvolume[:min_length], ldate[:min_length], lprice[:min_length]
- 第三步:删除animate函数内重复创建画布的代码
你在animate函数内部重复执行fig, axes=plt.subplots(2,1,squeeze=False),会导致每次刷新都新建空白画布,动画无法正常运行,直接删掉这行即可,画布在函数外提前创建就可以正常生效。
内容的提问来源于stack exchange,提问作者Alhikels Mixjwlw
相关产品推荐
相关产品推荐

