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

使用for循环保存多幅Matplotlib绘图时文件被覆盖,求解决方法

解决Matplotlib循环绘图保存时文件被覆盖的问题

你的问题根源很明确:每次循环都把变量y重新初始化为1,所以不管循环多少次,保存的文件名都是plot1.png,自然会一直覆盖第一个文件。下面给你两种简单的修复方案,顺便还帮你修正了代码里的一个小语法错误~

方案1:把y的初始化移到循环外面

把y = 1放在循环开始之前,这样每次迭代y都会递增,不会被重置:

y = 1
for name in names:
    DDT = dfs[dfs['Name'] == name]
    plt.figure(figsize=(15,7))
    plt.plot(DDT['Time'], DDT['Low'], label='Low')
    plt.plot(DDT['Time'], DDT['Heigh'], label='Heigh')  # 修正了原代码里Heigh后面多余的右括号
    plt.plot(DDT['Time'], DDT['Average'], label='AVG')
    plt.title(name)
    plt.legend()
    plt.savefig(f"plot{y}.png")  # 用f-string比format更简洁直观
    y += 1
    plt.close()

方案2:用enumerate自动生成索引(更Pythonic)

不需要手动维护y变量,直接用enumerate获取循环的索引,还可以指定起始值为1,完美匹配你想要的plot1.png、plot2.png命名规则:

for idx, name in enumerate(names, start=1):  # start=1让索引从1开始,而不是默认的0
    DDT = dfs[dfs['Name'] == name]
    plt.figure(figsize=(15,7))
    plt.plot(DDT['Time'], DDT['Low'], label='Low')
    plt.plot(DDT['Time'], DDT['Heigh'], label='Heigh')
    plt.plot(DDT['Time'], DDT['Average'], label='AVG')
    plt.title(name)
    plt.legend()
    plt.savefig(f"plot{idx}.png")
    plt.close()

另外注意原代码里的Heigh)有个多余的右括号,已经在上面的代码里修正了,不然运行时会抛出KeyError,找不到这个列名。

内容的提问来源于stack exchange,提问作者Ison

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:26:11