如何使用MNE-Python的plot_psd在同图内垂直绘制多个不重叠PSD
问题原因说明
第一版代码语法报错原因
- 创建画布时未将实例赋值给
fig变量,后续fig.add_subplot调用找不到对应变量 - 所有
add_subplot代码行末尾缺少闭合右括号,触发语法错误 - 额外创建了未使用的全局坐标轴对象,占用画布空间
第二版代码重叠原因
三个PSD都绑定到了同一个坐标轴对象上,自然会叠加显示
可运行解决方案
简化写法(无需手动调用GridSpec)
import matplotlib.pyplot as plt # 直接创建3行1列的子图,可按需调整画布尺寸 fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, ncols=1, figsize=(10, 12)) # 每个PSD绑定到独立坐标轴,show设为False避免中途弹出窗口 raw_egi.plot_psd(ax=ax1, show=False) ax1.set_title("原始EGI数据PSD") # 可自定义子图标题 raw_ws_ds_hp_lp.plot_psd(ax=ax2, show=False) ax2.set_title("降采样+滤波后数据PSD") raw_ws_ds_hp_lp_nf.plot_psd(ax=ax3, show=False) ax3.set_title("去噪后数据PSD") # 自动调整子图间距避免标签重叠 plt.tight_layout() plt.show()
兼容原有GridSpec逻辑的修正写法
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec fig = plt.figure(figsize=(10, 12)) gs = gridspec.GridSpec(3, 1) ax1 = fig.add_subplot(gs[0]) raw_egi.plot_psd(ax=ax1, show=False) ax2 = fig.add_subplot(gs[1]) raw_ws_ds_hp_lp.plot_psd(ax=ax2, show=False) ax3 = fig.add_subplot(gs[2]) raw_ws_ds_hp_lp_nf.plot_psd(ax=ax3, show=False) plt.tight_layout() plt.show()
注意事项
必须给plot_psd传入show=False参数,否则MNE会在每次调用该函数时自动触发画布渲染,导致子图创建逻辑失效。如果不需要默认的PSD图例,可额外传入average=False、spatial_colors=False等参数调整可视化样式。
原重叠效果参考

内容的提问来源于stack exchange,提问作者fredooms
相关产品推荐
相关产品推荐

