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
相关产品推荐
相关产品推荐

