You need to enable JavaScript to run this app. Matplotlib创建两个独立绘图窗口仅显示首图的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib创建两个独立绘图窗口仅显示首图的问题求助

Matplotlib 双窗口绘图问题修复

定位到的代码错误

  • 赋值逻辑颠倒:第二组绘图部分写的ax.plot = fig.add_subplot(),直接把ax对象自带的plot()绘图方法覆盖成了新的axes实例,后续绘图逻辑完全失效,根本无法生成第二组图表的内容。
  • 方法名拼写错误:第二组绘图时调用ax.plt(Z,B1),axes对象本身不存在plt方法,执行时会直接触发属性报错。
  • 多余空画布调用:两组绘图流程在调用plt.show()前,都无意义执行了一次plt.figure(),会额外新建空白画布弹出,同时打乱Matplotlib当前活跃画布的指向,导致图例绑定错位。
  • show调用位置不合理:原代码将plt.show()拆分放在两组绘图流程中间,Matplotlib默认非交互模式下,plt.show()是阻塞执行的,会等所有已打开的绘图窗口被手动关闭后,才会继续执行后续代码,这种拆分写法会拉长调试链路,一旦后续代码出现报错,就会直接中断流程,根本来不及生成第二组图表。
  • 图例绑定不稳定:多画布场景下使用全局plt.legend(),容易出现图例绑定到非预期画布的问题,需要明确绑定到正在操作的axes对象上。

修正后的可运行代码

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
df = pd.read_excel("My excel.xlsx")
# 保留你原本的变量赋值逻辑
A1 = some value 
A2 = value 
A20 = value 
Z = value 

# 第一组数据绘图
fig1 = plt.figure()
ax1 = fig1.add_subplot()
ax1.plot(Z,A1)
ax1.plot(Z,A2)
ax1.plot(Z,A3)
ax1.plot(Z,A4)
ax1.plot(Z,A5)
ax1.plot(Z,A6)
ax1.plot(Z,A20) 
ax1.legend(loc = 'upper left')

# 第二组数据绘图
B1 = value 
B2 = value 
B3 = value 
B4 = value 
B20 = value 
fig2 = plt.figure()
ax2 = fig2.add_subplot()
ax2.plot(Z,B1)
ax2.plot(Z,B2)
ax2.plot(Z,B20)
ax2.legend(loc= 'upper left')

# 所有绘图逻辑准备完成后,统一调用show展示所有独立窗口
plt.show()

实操注意点

  • 无需拆分多次调用plt.show(),等所有画布、绘图元素都设置完成后,最后一次性执行即可,Matplotlib会自动将每个创建的figure以独立窗口展示。
  • 多图场景下不要反复复用fig、ax这类通用变量名,给每个画布、轴对象设置独立命名,避免出现变量覆盖、句柄丢失的问题。
  • 优先使用对应axes对象的内置方法完成绘图、图例设置等操作,减少对全局pyplot接口的依赖,能大幅降低多图场景下的逻辑混乱概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 17:15:02