使用matplotlib.subplots绘制12行2列子图重复绘图问题排查
代码错误定位与修复方案
错误原因
- 核心问题是读取单个文件后额外嵌套了
for i in range(12)的循环,导致每读取一个文件,就会把当前文件的曲线重复绘制到对应列的全部12行子图上,没有匹配文件序号和子图行号的对应关系。 - 多余的循环直接导致了所有子图内容重复的问题。
修复逻辑
使用enumerate同时遍历文件序号和文件路径,读取第idx个文件后,仅向axs[idx, 0](第一列)或axs[idx, 1](第二列)的单个子图绘制曲线,删除遍历12行的多余循环。
修正后完整代码
import matplotlib.pyplot as plt import csv # 需保证files、files1均为长度12的文件路径列表,排序与子图行顺序一致 fig, axs = plt.subplots(12, 2, figsize=(20, 80)) # 绘制第一列(对应第一个文件夹的12个文件) for idx, file in enumerate(files): xData = [] yData = [] with open(file, "r") as f_in: reader = csv.reader(f_in) next(reader) for line in reader: try: float_1, float_2 = float(line[0]), float(line[1]) xData.append(float_1) yData.append(float_2) except ValueError: continue # 仅向当前序号对应行的第一列子图绘图 axs[idx, 0].plot(xData, yData) # 绘制第二列(对应第二个文件夹的12个文件) for idx, file in enumerate(files1): xData1 = [] yData1 = [] with open(file, "r") as f_in: reader = csv.reader(f_in) next(reader) for line in reader: try: float_1, float_2 = float(line[0]), float(line[1]) xData1.append(float_1) yData1.append(float_2) except ValueError: continue # 仅向当前序号对应行的第二列子图绘图 axs[idx, 1].plot(xData1, yData1) # 调整子图间距避免标签重叠 plt.tight_layout() plt.show()
提示:如果需要给子图添加标题、坐标轴标签等属性,可在
axs[idx, 0].plot(...)后追加对应设置代码即可。
内容的提问来源于stack exchange,提问作者Angela Mary
相关产品推荐
相关产品推荐

