问题描述
因为实验需要根据EEG的txt文档绘制波形图。同时需要满足多行的需要。因为txt不是默认的EEG信号格式。所以需要一些转换。
个人程序比较渣。这是一天的成果。希望能够给别的朋友以帮助,减少EEG研究中的困难。
(1)只能绘制单行,不能绘制多行
(2)所有行的图都一样
(3)如何获取多行txt数据
(4)如何将读取的数据绘制成图形
为了防止朋友们看不懂,几乎每一句都做了注释,也写了自己装进去的坑,为后来人鉴,为后来人戒。
解决方案
Created on Thu Dec 21 22:45:41 2021
@author: NJH
"""
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
def drawEEG_anyline(root):
n = 0
plt.subplots(figsize=(8, 9 )) #设定画布大小
dirs = os.listdir(root) # 获取文件名字
print('dirs:',dirs)
for dir in dirs:
n = n+1
y0 = [] # 如果不清空数据,那么所有的图形会一模一样,并显示成最后一个txt文档的数据
filename = []
dir_path = root + '\\' + dir # 文件带路径完整名字
print(dir_path)
filename = dir_path
f = open(filename)
lines = f.readlines()
for li in lines:
y0.append(li) #将数值写入y0
#画图
ax1 = plt.subplot(20, 1, n) # n表示第几行 每一行的图形应该有偏移,前面20是txt文档数,也是将来要绘制的子图数。
ax1.yaxis.set_major_locator(MultipleLocator(250)) # 设定y轴刻度间距
#第一条线
x = range(0, len(y0))
plt.plot(x, y0, color='grey', linewidth =0.8) # plt.plot(x, y0, color='black', label='$DT$', linewidth=0.8) # 绘制:横坐标,纵坐标,指定颜色、标签、线宽,标签采用latex格式,我在这里去掉了标签
plt.ylim(-50, 200) # 设定y轴范围,应该设为数据整体的最大值和最小值
plt.yticks([]) # 去掉x坐标轴刻度
plt.xlim(0, 4096) # 设定x轴范围
ax1.set_ylabel(dir,fontsize=5) #设置y轴名称,dir为前面获取到的文档的名字,将其赋给子图,也可以使用通道名
# ax1.set_xlabel('Output class',fontsize=24) #设置x轴名称
# ax1.set_ylabel('Target class',fontsize=24) #设置y轴名称
# plt.xticks([]) # 去掉横坐标值
# plt.yticks([]) # 去掉纵坐标值
# plt.tick_params(labelsize=14) #设置坐标轴刻度大小
plt.savefig("2.png", dpi=600) # 这三句应该放在for dir循环外面,否则只会显示相同的图形。
plt.xlim(0, 4096) # 为横坐标画上刻度
plt.show() # 显示图片
path = r'E:\matlab\CNN-classification\bonn epilepsy data\line5'
drawEEG_anyline(path) #调用函数
实验结果
这是20个txt文档,每个文档里面4096个数据。绘制成图如下所示。
感谢作者:谛听-
python 实现将多条曲线画在一幅图上的方法
https://www.jb51.net/article/164777.htm
感谢作者:留和路288号
python for循环画多子图并保存(涉及DateFrame.groupby,add_subplot)_留和路288号的博客-CSDN博客_python循环画子图
这篇文章使用的是:Python 中 MNE 读取EEG竞赛数据绘图和提取epoch(gdf格式),虽然没用到,可以整理在一起,方便其他朋友查阅。
作者:zhoudapeng01
Python 中 MNE 读取EEG竞赛数据绘图和提取epoch(gdf格式)_zhoudapeng01的专栏-CSDN博客_gdf格式