Python使用for循环批量处理多文件数据并实现matplotlib绘图
批量读取dat文件并绘图的实现方案
优先推荐调整读取逻辑,将数据存入列表后遍历绘图,代码可维护性更高:
方案1:优化读取+循环绘图(推荐)
先调整读取代码,避免动态生成变量:
import numpy as np import matplotlib.pyplot as plt # 用列表存储所有读取到的数据 data_list = [] for i in range(10, 15): current_data = np.genfromtxt(f'Filename000{i}.dat', delimiter='', skip_header=1) data_list.append(current_data)
再写循环绘图代码,可自定义不同数据的颜色和标签:
# 自定义折线样式,可根据需求修改 line_styles = ['-b', '-r', '-g', '-c', '-m'] for idx, data in enumerate(data_list): x = data[:, 0] y = data[:, 1] plt.plot(x, y, line_styles[idx], label=f'data{idx+1}') # 统一设置坐标轴和图例 plt.xlabel('x', fontsize=15) plt.ylabel('y', fontsize=15) plt.legend() plt.show()
方案2:基于已生成的data1~data5变量实现
如果不想修改之前的读取逻辑,也可以直接通过变量名遍历:
import numpy as np import matplotlib.pyplot as plt # 这里沿用你之前的读取代码 for i in range(10,15,1): locals()["data" + str(i-9)] = np.genfromtxt(f'Filename000{i}.dat', delimiter='', skip_header = 1) # 循环绘图部分 line_styles = ['-b', '-r', '-g', '-c', '-m'] for i in range(1, 6): data = locals()[f'data{i}'] x = data[:, 0] y = data[:, 1] plt.plot(x, y, line_styles[i-1], label=f'data{i}') plt.xlabel('x', fontsize=15) plt.ylabel('y', fontsize=15) plt.legend() plt.show()
小提示:动态生成局部变量的方式容易出现变量名冲突、debug难度高的问题,非必要场景优先选择用列表/字典存储批量数据。
内容的提问来源于stack exchange,提问作者3abaad
相关产品推荐
相关产品推荐

