Jupyter Notebook中循环拆分DataFrame绘图时重置画布的方法
解决Jupyter Notebook循环绘图重叠问题
问题根源
你的代码存在两个核心问题:
- 切片逻辑错误:原代码
data.iloc[i:i*(len(data) // 10)]无法正确分割出10行的子集,导致每次获取的数据范围不符合预期 - 绘图未重置:Matplotlib默认在当前活跃的绘图轴上继续绘制,没有创建新画布或清除旧绘图,导致后续图表叠加之前的曲线
修正方案
以下是修复后的代码,同时解决切片错误和绘图重叠问题:
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.DataFrame(np.random.rand(120, 10)) # 按每10行分割数据,循环12次 for i in range(len(data) // 10): # 正确切片:获取第i*10到(i+1)*10行的连续数据 split_data = data.iloc[i*10 : (i+1)*10] # 创建新的独立画布,避免与之前的绘图叠加 plt.figure(figsize=(15,5)) # 遍历子集的每行绘制曲线,用下划线避免覆盖外层循环变量i for _, row in split_data.iterrows(): row.plot() plt.show()
关键说明
- 使用
plt.figure()在每次循环中创建新画布,确保每张图完全独立,不会出现曲线叠加 - 修正切片表达式为
i*10 : (i+1)*10,保证每次准确获取10行数据,对应10条曲线 - 内层循环变量改用
_,避免与外层循环的i冲突,防止变量覆盖导致的逻辑错误
内容的提问来源于stack exchange,提问作者jim jarnac
相关产品推荐
相关产品推荐

