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

Matplotlib 3.5.2绘图异常 增量绘图不显示/交互失效问题咨询

Matplotlib 3.5.2 在 Spyder 中绘图不刷新问题修复

问题复现

全新Miniconda3环境下Matplotlib 3.5.2绘图行为与旧版本不符,两个典型复现场景:

示例1

import numpy as np
import matplotlib.pyplot as plt
from math import pi

x = np.linspace(0, 1)
y1 = np.sin(2*pi*x)
y2 = np.cos(2*pi*x)

plt.plot(x, y1)
plt.plot(x, y2)

逐行执行仅显示第一条(x, y1)曲线,第二条(x, y2)曲线不显示。

示例2

import numpy as np
import matplotlib.pyplot as plt
from math import pi

x = np.linspace(0, 1)
y1 = np.sin(2*pi*x)
y2 = np.cos(2*pi*x)

fig, ax = plt.subplots()
ax.plot(x, y1)

逐行执行无任何绘图内容,仅弹出空白窗口。

两种场景下调用plt.show()均无效,运行全程无报错、无警告。单条语句传入多组数据绘图(plt.plot(x, y1, x, y2))可正常显示。

环境信息

故障环境

Ubuntu 20.04 LTS
Miniconda 3
Python 3.9.13
Spyder 5.3.1,backend设置为Automatic(独立窗口弹出绘图)
Matplotlib 3.5.2

正常运行的对照环境

Ubuntu 20.04 LTS
Miniconda 3
Python 3.7.12
Matplotlib 3.4.3
Spyder 5.1.5

已排查到的现象

  • 执行plt.xlim([0, 0.5])这类坐标轴调整命令同样不生效
  • 不在IPython控制台逐行运行,改为一次性执行示例1完整脚本可得到预期结果(蓝色正弦、橙色余弦曲线),但示例2一次性执行仍无法正常绘图
  • 手动与绘图窗口交互后(如点击绘图区域按g键切换网格),未显示的绘图修改会突然刷新出来,可判定为IPython控制台与绘图窗口的交互刷新逻辑异常

修复方案

该问题是Spyder 5.3.x系列与Matplotlib 3.5.x系列的兼容bug,默认Automatic后端没有在逐行执行命令后自动触发画布重绘,可通过以下任意一种方式解决:

  • 修改后端配置
    打开Spyder设置,路径为Tools > Preferences > IPython console > Graphics,将Backend选项从Automatic切换为Qt5,点击Apply后重启IPython内核即可恢复正常。如果不需要独立绘图窗口,也可以选择Inline后端将图直接内嵌在控制台输出。
  • 手动强制刷新画布
    不修改配置的情况下,每次执行绘图、属性调整命令后,追加一行代码主动触发重绘:
    对应pyplot接口写法:
    plt.gcf().canvas.draw_idle()
    
    对应面向对象的ax接口写法:
    ax.figure.canvas.draw_idle()
    
  • 调整版本适配
    可将Matplotlib回退到无兼容问题的3.4.3版本,或把Spyder升级到5.4.0及以上版本,新版已经修复了该交互刷新的兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:03:20