Matplotlib 有没有一种方法可以让一个图可以点击,这样它就可以告诉我我在看什么样的脑电图通道?

Matplotlib 有没有一种方法可以让一个图可以点击,这样它就可以告诉我我在看什么样的脑电图通道?,matplotlib,jupyter-notebook,mouse,neuroscience,Matplotlib,Jupyter Notebook,Mouse,Neuroscience,注:这是一个关于小鼠脑电数据绘制的问题 我画了一张图,显示了过滤后的EEG电极通道的平均试验信号。在绘制此图时,我看到了一些我想从绘图中排除的信号,但我没有办法知道绘制了哪些通道。是否有一种方法可以添加一些内容,允许我单击或悬停在其中一条绘制的线/通道上,并让我的jupyter笔记本告诉我单击/悬停在哪个通道上 这是我希望使其可点击的情节: 下面是我用来绘制图的代码,如果有用的话: pick_stim = 'opto' pick_param = '500ms' pick_sweep = 0

注:这是一个关于小鼠脑电数据绘制的问题

我画了一张图,显示了过滤后的EEG电极通道的平均试验信号。在绘制此图时,我看到了一些我想从绘图中排除的信号,但我没有办法知道绘制了哪些通道。是否有一种方法可以添加一些内容,允许我单击或悬停在其中一条绘制的线/通道上,并让我的jupyter笔记本告诉我单击/悬停在哪个通道上

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

下面是我用来绘制图的代码,如果有用的话:

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, color='black', linewidth=0.6, alpha=0.8)
axs[1].axvspan(-.001, .001, color='r', alpha=0.5)
axs[1].set_title('No Run trials')   
pick_stim='opto'
拾取参数='500ms'
拾取_扫描=0
prex=.1#.2ms,在刺激前进行绘图
postx=.1#.6ms,在刺激后绘制
auc_窗口=[-.04,.1]
图,axs=plt.子图(1,2,figsize=(9,5),sharex=True,sharey=True,constrated_layout=True)
运行时间x=试运行[拾取刺激][拾取参数][拾取扫描][0]
试运行=试运行[拾取刺激][拾取参数][拾取扫描][1]#运行速度
ztimex=zscore_traces[pick_stim][pick_param][pick_sweep][0]#需要AUC
zscore_trials_all=zscore_not_mean_traces[pick_stim][pick_param][pick_sweep][1]
#试运行#
平均运行时间=np。平均值(所有试验时间[:,:,运行时间],轴=2)

运行_zscore_inds=np.nonzero((ztimex>=auc_window[0])&(ztimex=auc_window[0])&(ztimex您可以向每条曲线添加标签,然后在悬停(或单击
hover=False
时)时使用来显示注释

请注意,要在Jupyter笔记本中进行交互式绘图,需要使用
%matplotlib笔记本
(这可能取决于Jupyter的安装方式),而不仅仅是
%matplotlib内联
(生成静态图像)。请参阅

以下是一个示例,该示例显示了一些测试数据的总体思路:

%matplotlib笔记本
将matplotlib.pyplot作为plt导入
将numpy作为np导入
导入MPLS游标
np.随机种子(123)
x=np.arange(100)
y=np.random.randn(100,20).cumsum(轴=0)
图,ax=plt.子批次()
曲线=plt.绘图(x,y,颜色=黑色,α=0.3)
对于ind,枚举中的曲线(曲线):
曲线集_标签(f'曲线nº{ind}')
游标=多个游标。游标(曲线,悬停=真)
cursor.connect('add',lambda sel:sel.annotation.set_text(sel.artist.get_label()))
plt.show()

如果你回答了你的问题,你可以考虑投票和/或回答。谢谢!我要试一试,这应该做我想做的事。