微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法让一个情节可点击,这样它就会告诉我我在看哪个 EEG 通道?

如何解决有没有办法让一个情节可点击,这样它就会告诉我我在看哪个 EEG 通道?

注意:这是一个关于鼠标脑电图数据绘图的问题。

我绘制了一个图,显示了过滤后的 EEG 电极通道的平均试验信号。在绘制此图时,我看到了一些我想从图中排除的信号,但我无法确定绘制了哪些通道。有没有办法添加一些东西,让我点击或悬停在其中一个绘制的线条/通道上,并让我的 jupyter 笔记本告诉我我点击/悬停在哪个通道上?

这是我希望可以点击的情节:

EEG channel plot

如果有帮助,这里是我用来制作绘图的代码

pick_stim = 'opto'
pick_param = '500ms'
pick_sweep = 0

prex = .1 # .2ms before stim to plot
postx = .1 # .6ms after stim to plot

auc_window = [-.04,.1]

fig,axs = plt.subplots(1,2,figsize=(9,5),sharex=True,sharey=True,constrained_layout=True)

run_timex = trial_running[pick_stim][pick_param][pick_sweep][0]
run_trials = trial_running[pick_stim][pick_param][pick_sweep][1] #running speed


ztimex = zscore_traces[pick_stim][pick_param][pick_sweep][0] #need for AUC
zscore_trials_all = zscore_not_mean_traces[pick_stim][pick_param][pick_sweep][1] 

# Run trials #
mean_run_zscore = np.mean(zscore_trials_all[:,:,run_trial],axis=2)
run_zscore_inds = np.nonzero((ztimex >= auc_window[0]) & (ztimex <= auc_window[1]))[0] 
run_zscore_trace = mean_run_zscore[run_zscore_inds,:]
axs[0].plot(ztimex[run_zscore_inds],run_zscore_trace,color='black',linewidth=0.6,alpha=0.8)
#axs[0].plot(run_timex,run_trials,color='k',linewidth=0.6)
axs[0].axvspan(-.001,.001,color='r',alpha=0.5)
#axs[0].set_xlim([-prex,postx])
axs[0].set_title('Run trials')

# No Run #

mean_no_run_zscore = np.mean(zscore_trials_all[:,no_run],axis=2)
no_run_zscore_inds = np.nonzero((ztimex >= auc_window[0]) & (ztimex <= auc_window[1]))[0] 
no_run_zscore_trace = mean_no_run_zscore[no_run_zscore_inds,:]
axs[1].plot(ztimex[no_run_zscore_inds],no_run_zscore_trace,alpha=0.8)
axs[1].axvspan(-.001,alpha=0.5)
axs[1].set_title('No Run trials')   

解决方法

您可以为每条曲线添加标签,然后使用 mplcursors 在悬停时(或点击 hover=False 时)显示注释。

请注意,要在 Jupyter 笔记本中创建交互式绘图,需要 %matplotlib notebook(这可能取决于 Jupyter 的安装方式)而不仅仅是 %matplotlib inline(生成静态图像)。见Docs

这是一个示例,展示了一些测试数据的总体思路:

%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
import mplcursors

np.random.seed(123)
x = np.arange(100)
y = np.random.randn(100,20).cumsum(axis=0)

fig,ax = plt.subplots()
curves = plt.plot(x,y,color='black',alpha=0.3)
for ind,curv in enumerate(curves):
    curv.set_label(f'curve nº{ind}')
cursor = mplcursors.cursor(curves,hover=True)
cursor.connect('add',lambda sel: sel.annotation.set_text(sel.artist.get_label()))
plt.show()

mplcursors to show the index of a curve

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。