You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:00:01