Pyplot - 如何为在同一子图轴中绘制的多个数据设置标签



我有一个包含多类数据的数据集。它们的组织方式如下:[通道、样本、任务]。有 5 个通道,每个任务每个通道 1024 个样本,有 270 个任务。我想要 5 块图。每个通道一个。我想标记每个频道中的每个任务。我只有颜色可以及时识别每个任务。但是颜色与任务无关。

import scipy.io as sio
import numpy as np
import matplotlib.pyplot as plt
mat_contents = sio.loadmat('SubA_5chan_3LRF')
info = mat_contents['Info']
labels = mat_contents['LABELS'] 
eegdata = mat_contents['EEGDATA'] # [channels, sample in time, trial]
tam_janela = len(eegdata[0, :, 0])
fig, (ch1, ch2, ch3, ch4, ch5) = plt.subplots(nrows = 5, ncols = 1, sharex = False, sharey=True)
for trial in range(10):
  x = np.linspace(0, (tam_janela + tam_janela*trial), (tam_janela + tam_janela*trial) )
  ch1.plot((x[(trial*1024):]), eegdata[0, :, trial])
  ch1.set_ylabel('Channel 1 (V)')
  ch2.plot((x[(trial*1024):]), eegdata[1, :, trial])
  ch2.set_ylabel('Channel 2 (V)')
  ch3.plot((x[(trial*1024):]), eegdata[2, :, trial])
  ch3.set_ylabel('Channel 3 (V)')
  ch4.plot((x[(trial*1024):]), eegdata[3, :, trial])
  ch4.set_ylabel('Channel 4 (V)')
  ch5.plot((x[(trial*1024):]), eegdata[4, :, trial])
  ch5.set_xlabel('Time')
  ch5.set_ylabel('Channel 5 (V)')
plt.suptitle('EEG recordings from Subject A with 5 channels')
plt.show()

这就是我现在所拥有的

for trial in range(12):
  x = np.linspace(0, (tam_janela + tam_janela*trial), (tam_janela + tam_janela*trial) )
  if labels[trial] == 1:
    task_label = 'Left Hand'
  elif labels[trial] == 2:
    task_label = 'Right Hand'
  elif labels[trial] == 3:
    task_label = 'Both feet'
  lab, = ch1.plot((x[(trial*1024):]), eegdata[0, :, trial], label = 'Inline label')
  ch1.set_ylabel('Channel 1')
  lab.set_label(task_label)
  ch2.plot((x[(trial*1024):]), eegdata[1, :, trial])
  ch2.set_ylabel('Channel 2')
  ch3.plot((x[(trial*1024):]), eegdata[2, :, trial])
  ch3.set_ylabel('Channel 3')
  ch4.plot((x[(trial*1024):]), eegdata[3, :, trial])
  ch4.set_ylabel('Channel 4')
  ch5.plot((x[(trial*1024):]), eegdata[4, :, trial])
  ch5.set_xlabel('Time')
  ch5.set_ylabel('Channel 5')
ch1.legend(loc='center left', fontsize = 7, ncol = 12)
plt.suptitle('EEG recordings from Subject A with 5 channels (V)')
plt.grid(True)
plt.show()

我想要的结果

最新更新