matplotlib仿绘多曲线在同一张图内并行陈列(非subplot)

先给出效果图

制作方法

最近被被要求画出如下图的若干段脑电信号在同一张图内并行陈列的图表

这幅图的横坐标单位是秒(s),纵坐标是脑电传感器电极的名称,这种图可以用来清晰地比对感兴趣的电极的信号异同。

绘制这幅图所用的工具是mne工具包内的mne.io.raw.plot()方法,使用起来非常方便。然而这幅图有一个缺点,就是横坐标没办法显示成确切的时间点,如完善11点01分11秒这种,但是我的任务是需要将横坐标以时间点的形式给出。由于此方法被封装,底层代码又很长,我就想干脆自己用matplotlib模拟一个。

具体思路其实很简单,就是将纵坐标的数据组织成一个numpy数组,每一行代表一根曲线对应的数据。之后,在每一行上加上一个偏移量,使曲线可以错开。最后,重命名对应的横纵坐标刻度即可。

具体步骤

首先获取数据,我的数据已经存储在名为selection的元组中,元素类型为np.array,selection[0]是一个矩阵,每行对应一根曲线的数据;selection[1]是时间序列

>>> selection
(array([[-7.69921087e-04, -7.57030465e-04, -7.50389841e-04, ...,
        -2.24608700e-04, -2.06249329e-04, -1.89452457e-04],
       [-2.41010372e-04, -2.49604102e-04, -2.72260299e-04, ...,
        -2.85150894e-04, -2.74213420e-04, -2.45307237e-04],
       [-6.52319297e-05, -7.46069201e-05, -1.01950642e-04, ...,
        -9.17944025e-05, -8.00756645e-05, -5.50756901e-05],
       ...,
       [-2.99605560e-04, -3.18355535e-04, -3.53511738e-04, ...,
        -1.44496939e-05,  8.59715013e-06,  4.68783486e-05],
       [-7.42158705e-05, -9.76533393e-05, -1.34372040e-04, ...,
        -3.08199934e-04, -3.14449925e-04, -3.02731191e-04],
       [-9.76123739e-06, -4.02299378e-05, -7.81205012e-05, ...,
        -4.09760587e-04, -3.96869983e-04, -3.73432521e-04]]), array([0.000e+00, 1.000e-03, 2.000e-03, ..., 9.998e+00, 9.999e+00,
       1.000e+01]))

接着设置偏移量offset,我的数据设置0.002的间隔就够区分了,各位的偏移量请自行摸索

>>> offset = np.arange(0, 11*0.002, 0.002)
>>> offset
array([0.   , 0.002, 0.004, 0.006, 0.008, 0.01 , 0.012, 0.014, 0.016,
       0.018, 0.02 ])

修改横坐标的刻度为具体时间点。这个方法的第一个变量是原始的刻度序列,第二个变量是修改后对应的刻度序列

>>> plt.xticks([0,2,4,6,8,10], ['$23:12:43$','$23:12:45$','$23:12:47$','$23:12:49$','$23:12:51$','$23:12:53$'])

再修改纵坐标为电极名称。参数含义同plt.xticks

>>> ylabel = ['$POL\ G9$', '$POL\ G5$', '$POL\ G4$','$POL\ G2$', '$POL\ G3$', '$POL\ H3$', '$POL\ G7$', '$POL\ G8$', '$POL\ G6$', '$POL\ B15$', '$POL\ H1$']
>>> plt.yticks(offset.tolist(), ylabel)

在原始数据上加上偏移量并绘制

>>> x = selection[1]
>>> y = selection[0].T + offset
>>> plt.plot(x, y)

展示图片

>>> plt.show()

最后的效果图:

以上。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值