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

plt.imshow()导致seaborn.countplot()输出异常的问题排查

解决Spyder中绘图覆盖/不显示的问题

我刚在Spyder里踩过几乎一模一样的坑!这完全不是你代码逻辑的问题,纯粹是Spyder默认的绘图管理方式和Jupyter不一样导致的。

问题根源

Jupyter里的%matplotlib inline会自动为每段绘图代码创建独立的输出块,但Spyder默认是在同一个Figure画布上更新内容:你先画了柱状图,之后的plt.imshow会直接覆盖或者挤压这个画布的内容,导致原来的柱状图变形,新的数字图像也显示不正常。

三种快速解决办法

1. 显式创建新画布(最推荐)

在每次绘图前用plt.figure()新建一个独立的画布,这样两个图像会分开显示:

# 第一个绘图:数字分布柱状图
plt.figure()  # 新建画布
g = sns.countplot(Y_train)
plt.title("Digit Distribution")  # 可选:加个标题区分

# ... 中间的数据预处理代码 ...

# 第二个绘图:显示数字图像
plt.figure()  # 再新建一个画布
g = plt.imshow(X_train[0][:,:,0], cmap='gray')  # 加上cmap='gray'让数字更清晰
plt.title("Sample Digit Image")
plt.show()  # 强制弹出所有图像

2. 调整Spyder的绘图后端设置

打开Spyder的偏好设置:Tools > Preferences > IPython console > Graphics,把Backend选项改成Qt5或者Automatic,然后重启Spyder。这样每次绘图会自动弹出新的独立窗口,不会覆盖之前的图像。

3. 每次绘图后显式调用plt.show()

在每段绘图代码后面加上plt.show(),强制显示当前画布,后续代码会自动创建新画布:

g = sns.countplot(Y_train)
plt.show()  # 先显示柱状图

# ... 中间代码 ...

g = plt.imshow(X_train[0][:,:,0], cmap='gray')
plt.show()  # 再显示数字图像

修改后的完整测试代码片段

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
from sklearn.model_selection import train_test_split 
from keras.utils.np_utils import to_categorical 

np.random.seed(2) 
sns.set(style='white', context='notebook', palette='deep')

# Load the data 
train = pd.read_csv("./input/train.csv") 
test = pd.read_csv("./input/test.csv") 

Y_train = train["label"] 
X_train = train.drop(labels = ["label"],axis = 1) 
del train 

# 第一个绘图:数字分布柱状图
plt.figure()
g = sns.countplot(Y_train)
plt.show()

# 数据预处理
X_train = X_train / 255.0 
test = test / 255.0 

X_train = X_train.values.reshape(-1,28,28,1) 
test = test.values.reshape(-1,28,28,1) 

Y_train = to_categorical(Y_train, num_classes = 10) 

random_seed = 2 
X_train, X_val, Y_train, Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=random_seed) 

# 第二个绘图:显示数字图像
plt.figure()
g = plt.imshow(X_train[0][:,:,0], cmap='gray')
plt.show()

试试上面的方法,你就能同时看到正常的柱状图和清晰的数字图像啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:45