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

Jupyter Notebook中matplotlib/seaborn子图内容全部叠加问题求助

问题原因
  • 调用plt.plot()时,matplotlib默认选择当前处于激活状态的子图完成绘图,你没有指定绘图的目标子图,所有plot操作都落到了最后生成的子图上
  • 代码中axs[ind_pow] = plt.plot(...)的写法错误:plt.plot()返回的是折线对象列表,并非Axes对象,你直接覆盖了plt.subplots()生成的Axes实例,导致后续无法正确索引到前面的子图
折线图修复代码
import numpy as np
import matplotlib.pyplot as plt

powers = ["alpha", "beta", "low-gamma", "high-gamma"]
x_axis = np.arange(17) # 受试者数量
n_subjects = 17 # 替换为你实际的受试者数量

fig, axs = plt.subplots(4, figsize=(6, 12)) # 可自行调整画布尺寸

for ind_pow, pow_ in enumerate(powers):
    print("analysizing", pow_)
    res_0     = []
    res_01    = []
    res_001   = []
    res_0001  = []
    res_00001 = []
    for ind_sub in range(n_subjects):
        # 原有计算res系列变量的逻辑保留
        pass
    
    # 直接调用对应子图ax的plot方法,不要使用全局的plt.plot
    axs[ind_pow].plot(x_axis, np.array(res_0), "r", 
                      x_axis, np.array(res_01), "b",
                      x_axis, np.array(res_001), "g",
                      x_axis, np.array(res_0001), "y",
                      x_axis, np.array(res_00001), "k")
    # 可选:给子图添加标题区分不同波段
    axs[ind_pow].set_title(f"{pow_}波段计算结果")

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()
seaborn热力图修复方法

seaborn的所有绘图接口都支持ax参数,指定你要绘图的目标Axes对象即可,不要把热力图的返回值赋值给axs元素:

import seaborn as sns
import matplotlib.pyplot as plt

powers = ["alpha", "beta", "low-gamma", "high-gamma"]
fig, axs = plt.subplots(4, figsize=(6, 12))

for ind_pow, pow_ in enumerate(powers):
    # 你的matrix矩阵计算逻辑保留
    matrix = np.random.rand(10,10) # 替换为你实际的矩阵数据
    # 传入ax参数指定绘图的子图对象
    sns.heatmap(matrix, ax=axs[ind_pow])
    axs[ind_pow].set_title(f"{pow_}波段热力图")

plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:01