如何用Python迭代实现多DataFrame与基线DataFrame的分组子图绘制?
用迭代方式简化多DataFrame多ID多特征的绘图逻辑
核心思路
把重复的绘图逻辑拆解成三层迭代,彻底替代重复代码:
- 迭代所有需要对比的DataFrame(含基线)
- 迭代每个唯一ID
- 迭代三类特征(Salary/Children/Expenditure)
代码实现
import matplotlib.pyplot as plt # 1. 把所有DataFrame打包成字典,统一管理方便迭代 df_collection = { '基线': df_base, '对比组1': df_1, '对比组2': df_2, '对比组3': df_3 } # 2. 获取所有唯一ID(假设各DataFrame的ID集合一致) all_ids = df_base['id'].unique() # 3. 定义要绘制的三类特征 target_features = ['Salary', 'Children', 'Expenditure'] # 4. 迭代每个ID生成对比图 for current_id in all_ids: # 创建3个子图,横向排列 fig, axes = plt.subplots(1, 3, figsize=(18, 5)) fig.suptitle(f'ID: {current_id} 特征随Cycle变化对比', fontsize=14) # 迭代每个特征,对应子图绘制曲线 for idx, feature in enumerate(target_features): ax = axes[idx] # 迭代每个DataFrame,绘制当前特征的曲线 for df_name, df in df_collection.items(): # 筛选当前ID的数据并按cycle排序 filtered_data = df[df['id'] == current_id].sort_values('cycle') # 绘制cycle vs 特征的曲线 ax.plot(filtered_data['cycle'], filtered_data[feature], label=df_name, marker='o') # 设置子图基础样式 ax.set_title(f'{feature} 变化趋势') ax.set_xlabel('Cycle') ax.set_ylabel(feature) ax.legend() ax.grid(True) plt.tight_layout() plt.show()
关键优化点
- 字典管理DataFrame:后续新增对比组只需在字典中添加条目,无需修改绘图逻辑
- 三层迭代压缩代码:把ID、特征、DataFrame三个维度的重复工作用循环处理,彻底告别27次重复编码
- 统一数据预处理:自动筛选当前ID并按cycle排序,保证曲线时序正确
- 高可扩展性:新增特征只需修改
target_features列表,无需调整核心绘图代码
内容的提问来源于stack exchange,提问作者NN_Developer
相关产品推荐
相关产品推荐

