首先介绍一下这个库吧,它是一个强大的python绘图工具包,之前一直是copy代码(拾人牙慧,新学的词),自己没有真正系统学习过。现在因为想要自己绘图,被迫学习了一下,发现so easy.
附上matplotlib的官方文档:https://matplotlib.org/stable/index.html
附上W3school的入门教程:https://www.w3schools.com/python/matplotlib_intro.asp
W3school只能帮你入门(其实这就够了),具体想要实现一些细节的东西可以查看官方文档or百度。
下面附上自己绘制N2pc的代码
def plot_n2pc(data1, data2, title):
'''
:param data1: data1.shape = (1,301) 是PO7电极的EEG
:param data2: data1.shape = (1,301) 是PO8电极的EEG
:return:
'''
x = np.linspace(-0.2, 1, 301)
if title == "right target":
# PO7-P08 对侧-同侧
data_n2pc = data1 - data2
elif title == "left target":
# P08-PO7 对侧-同侧
data_n2pc = data2 - data1
plt.plot(x, data1, linestyle='dotted', label='P07')
plt.plot(x, data2, linestyle='dashdot', label='PO8')
plt.plot(x, data_n2pc, label='N2pc')
# 画出一条网格线
plt.axhline(0, linestyle='--', color='black', linewidth='0.5')
plt.axvline(0, linestyle='--', color='black', linewidth='0.5')
# 设置标签
plt.title(title)
plt.xlabel('Time(ms)')
plt.ylabel('Amplitude(uv)')
# 设置刻度的范围
plt.xlim(-0.2, 1)
plt.ylim(-10e-6, 10e-6)
plt.yticks(ticks=np.linspace(-10e-6, 10e-6, 9), labels=np.linspace(-10, 10, 9))
# 设置图例的标签
plt.legend()
plt.show()
![](https://img-blog.csdnimg.cn/img_convert/6df0d1d641e6c8bfce7026f55c650bf0.jpeg)
这里涉及到几个有难度的绘制点
如何只画出特定条网格线
一般情况下,如果想要绘制网格线可以采用plt.grid()的方法,但是如果想要实现只画一条的网格线,则使用
# 水平线,需要传入y的具体值
plt.axhline(y, linestyle='--', color='black', linewidth='0.5')
# 垂直线,需要传入x的具体值
plt.axvline(x, linestyle='--', color='black', linewidth='0.5')
设置图例标签
plt.legend()# plt.plot()label属性这边可以设置标签的名字或者直接在里面添加
plt.legend(handles=[l1, l2], labels=['up', 'down'])
推荐知乎一篇文章:https://zhuanlan.zhihu.com/p/41781440
设置x轴和y轴刻度
# 这两个可以设置在x,y轴呈现的刻度范围
plt.xlim(-0.2, 1)
plt.ylim(-10e-6, 10e-6)
改变x,y轴坐标的刻度
plt.yticks(locs,[labels],*kwarges)
plt.xticks(locs,[labels],*kwarges)
locs是坐标的具体位置,labels是你想要替换的标签值,还有别的其他参数可以进行设置
如下图对比,我使用yticks前的y轴是这样的,使用后的y轴是上面的图这样的
![](https://img-blog.csdnimg.cn/img_convert/2e4101248833e652f7feba4a38a4cc57.jpeg)
参考:https://blog.csdn.net/Poul_henry/article/details/82590392