如何批量绘制DataFrame所有列与目标列的Matplotlib散点图并逐一保存?
高效批量绘制散点图并保存的方法
当然有更省心的解决方案!完全不用手动修改68次代码,只需要通过一个循环就能自动完成所有散点图的绘制和保存,步骤如下:
完整实现代码
import matplotlib.pyplot as plt import pandas as pd # 假设你的DataFrame名为output_weight,目标列是'target_sur' target_col = 'target_sur' # 筛选出所有需要作为X轴的列(排除目标列) feature_columns = [col for col in output_weight.columns if col != target_col] # 遍历每个特征列,批量生成散点图 for col in feature_columns: # 创建画布 plt.figure(figsize=(9, 5)) # 绘制散点图 plt.scatter(output_weight[col], output_weight[target_col], color='darkred', s=17) # 设置图表标题和坐标轴标签(用f-string动态生成) plt.title(f'{col} vs {target_col}', fontsize=10) plt.xlabel(col, fontsize=10) plt.ylabel(target_col, fontsize=10) # 关闭刻度偏移,用普通格式显示数值 plt.ticklabel_format(useOffset=False, style='plain') plt.grid(True) # 保存图片,文件名用列名命名,确保每个文件唯一 plt.savefig(f'{col}_vs_{target_col}.png', dpi=300, bbox_inches='tight') # 关闭画布,释放内存(非常重要,避免多次循环后内存溢出) plt.close()
关键步骤解释
- 批量获取列名:用列表推导式自动筛选出所有非目标列,不用手动罗列68个列名,只要DataFrame结构不变,新增列也能自动适配。
- 动态生成图表元素:通过f-string把当前列名插入到标题、坐标轴标签和文件名中,确保每个图表的标识清晰且唯一。
- 内存优化:每次循环后用
plt.close()关闭画布,避免同时在内存中保留68个图表导致性能下降。 - 保存细节:
dpi=300保证图片清晰度,bbox_inches='tight'防止标题或坐标轴标签被截断。
额外优化建议
- 如果需要跳过某些特定列,只需修改列表推导式的条件,比如:
feature_columns = [col for col in output_weight.columns if col not in [target_col, '列名1', '列名2']] - 如果想统一调整图表样式(比如颜色、点大小),直接在循环内修改
plt.scatter()的参数即可,一次修改同步所有图表。 - 如果需要临时查看图表,可以在
plt.savefig()之后添加plt.show(),但注意68次循环会弹出大量窗口,建议优先保存后批量查看。
内容的提问来源于stack exchange,提问作者Anna Shevtsova
相关产品推荐
相关产品推荐

