matplotlib plot绘图报ValueError:x,y,format string不能为None
报错根因
这个错误和matplotlib本身逻辑无关,问题出在你写的smooth_curve函数上:你在函数末尾只写了return,没有指定要返回的计算结果,Python中这种写法会让函数默认返回None。当你把smooth_curve(acc)作为y轴参数传给plt.plot()时,相当于传入了空值,直接触发了"x/y/格式参数不能为None"的校验报错。
你提到的"smooth_curve(acc)可正常编译"是误区:Python不会对无返回值的函数抛编译错误,只要语法没写错就能运行,只是运行后拿不到你想要的平滑序列而已。你可以单独执行print(smooth_curve(acc))验证,输出必然是None。
修复方法
只需要修改函数最后一行的return语句,把你计算完成的平滑点列表返回即可,修正后的函数代码:
def smooth_curve(points, factor=0.8): smoothed_points = [] for point in points: if smoothed_points: previous = smoothed_points[-1] smoothed_points.append(previous * factor + point * (1 - factor)) else: smoothed_points.append(point) # 补全返回的目标列表 return smoothed_points
校验步骤
改完函数后先做个简单校验,避免后续再出长度不匹配之类的其他问题:
- 单独调用
smoothed_acc = smooth_curve(acc),确认返回值是列表类型 - 检查
len(smoothed_acc)和len(epochs)长度完全一致 - 确认无误后再执行原绘图代码,即可正常画出带指数移动平均的平滑曲线
内容的提问来源于stack exchange,提问作者Crackerslover
相关产品推荐
相关产品推荐

