Python遍历多文本文件循环绘制第7列与第5列关系图
批量绘制多文本文件指定列关系图实现方案
用Python就能实现单代码循环批量处理,不需要手动逐个文件操作,核心逻辑是遍历目标目录的文本文件、自动读取表头和对应列数据、逐一生成图表保存,具体实现如下:
依赖安装
先安装需要的第三方库,在命令行执行以下命令即可:pip install pandas matplotlib
可直接运行的代码
import os import pandas as pd import matplotlib.pyplot as plt # -------------------------- 这里修改为你自己的配置 -------------------------- TARGET_DIR = r"替换为存放文本文件的文件夹绝对路径" # Windows路径示例:r"C:\data\txt_files",Mac/Linux路径示例:"/home/xxx/data" SAVE_DIR = r"替换为生成图片的保存文件夹路径" # 文件夹不存在时会自动创建 X_AXIS_COL = 5 # 第5列作为X轴,按日常从1开始计数的列号填写即可 Y_AXIS_COL = 7 # 第7列作为Y轴 # ---------------------------------------------------------------------- os.makedirs(SAVE_DIR, exist_ok=True) # 遍历目标目录下所有txt格式文件 for filename in os.listdir(TARGET_DIR): if not filename.lower().endswith(".txt"): continue # 跳过非txt格式的文件 file_full_path = os.path.join(TARGET_DIR, filename) try: # 读取文本,第一行自动识别为表头,自动适配空格、制表符、逗号等常见分隔符 df = pd.read_csv( file_full_path, header=0, sep=None, engine="python", # 如果读文件报编码错误,解开下一行注释,根据文件实际编码替换为gbk/utf-8 # encoding="gbk" ) # 跳过列数不足的异常文件 if df.shape[1] < max(X_AXIS_COL, Y_AXIS_COL): print(f"[跳过] 文件{filename}总列数不足,无法读取目标列") continue # 提取目标列数据和对应表头(自动把从1开始的列号转换为pandas使用的0起始索引) x_series = df.iloc[:, X_AXIS_COL - 1] y_series = df.iloc[:, Y_AXIS_COL - 1] x_label = df.columns[X_AXIS_COL - 1] y_label = df.columns[Y_AXIS_COL - 1] # 绘制图表 plt.figure(figsize=(8, 5), dpi=120) # 默认绘制散点图,需要折线图就把scatter替换为plot plt.scatter(x_series, y_series, s=12, color="#2c7fb8", alpha=0.8) plt.xlabel(x_label, fontsize=10) plt.ylabel(y_label, fontsize=10) plt.title(f"{filename}\n{y_label} 随 {x_label} 变化关系", fontsize=11) plt.grid(linestyle="--", alpha=0.3) # 保存图片,文件名和原txt文件一一对应,默认格式为png save_path = os.path.join(SAVE_DIR, filename.replace(".txt", ".png")) plt.savefig(save_path, bbox_inches="tight") plt.close() # 必须关闭当前画布,避免后续图表叠加、内存占用过高 print(f"[完成] 已生成{filename}对应图表") except Exception as e: print(f"[错误] 处理{filename}时出错:{str(e)}")
常见调整说明
- 分隔符适配:如果你的文本使用固定特殊分隔符(比如分号
;),把代码里sep=None改成sep=";"即可,自动识别模式可以覆盖90%以上常规导出的文本数据 - 图表类型切换:默认生成散点图,需要折线趋势图就把
plt.scatter(...)替换成plt.plot(...),可以额外加marker="o"参数给折线添加数据点标记 - 空值过滤:如果数据里存在缺失值、空行,可以在提取列数据前加一行
df = df.dropna(subset=[df.columns[X_AXIS_COL-1], df.columns[Y_AXIS_COL-1]]),自动丢弃目标列为空的无效行 - 图片格式:如果需要存成jpg/svg等格式,直接修改保存路径的文件后缀即可
内容的提问来源于stack exchange,提问作者Sayak
相关产品推荐
相关产品推荐

