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

