How can i plot a multiple EEG signal channels ?

hello sirs, how can we plot a picture has multiple EEG signal channels like the picture above. My data have sampling frequency fs= 500, recordDuration= 1s, 21 channels and 21 record numbers. Can you give me an example code ? Thanks !

 Accepted Answer

Example:
fs = 500;
tmax = 1;
nch = 21;
nt = fs*tmax;
t = (0:nt-1)/fs;
data = randn(nt,nch);
figure('Position',[1 1 500 800])
h = stackedplot(t,data,'k','DisplayLabels',"EEG"+(1:nch));
set(h.AxesProperties,'YLimits',[-3 3])

4 Comments

thanks, sir. it is a big help. This code took me for half of a day
You're welcome! Any questions, let me know.
If this answer helped you, consider voting for it and/or "Accept"ing it. Thanks!
Posted as comment-as-flag by Nguyen Ngoc Nghiem:
this answer was a great help for this problem

I want to sampling and quantization of eeg signal

Sign in to comment.

More Answers (1)

If you dont want to implement it, just use EEGLAB (which can read in numerous different data types, if I remember correctly, you can also use it to change your data type to .mat).
If you want to implement it with the slider and whatnot, check out MATLAB GUI and its functions (you will probably need uifigure, uipanel, uiaxes, uislider).
To change the names on the y-axis, use yticks and yticklabels function. (Note that if your data is really large and you read it all in, the GUI might be slow and/or crash, EDIT: but this is not the case for you)
Alternatively stackedplot, you can use subtightplot. Or if you dont mind if two channels possibly overlap, than add different values to the different channels.
EDIT: I realized that your data is only one second long, so you probably dont need GUI with its slider, but the rest of my answer is relevant.

3 Comments

%dat= your data with size (21,500)
timemax=1;%i.e. one sec
datamax=timemax*Freq;
t=(0:datamax)./Freq;
subtight = @(m,n,p) subtightplot (m, n, p, [0.0 0.05], [0.1 0.01], [0.1 0.01]);
figure;
for k=1:size(dat,1)
subtight(size(dat,1),1,k)
plot(t(1:timemax*Freq),dat(k,1:timemax*Freq));
ylabel(['CH',num2str(k)],'FontSize',5,'FontWeight','bold','Color','b');%change this with yticks,yticklabels if you dontwant to plot
%all channels or you dont have all channels or they are in not ascending order
yticks([]);
if k~=size(dat,1) %to only have x-ticks for the last
xticks([]);
end
end
The picture looks somewhat different from what you posted since you want to plot only one second
Thanks, sir. I encountered a lot of difficulties when dealing with 3D datasets with .edf files. :((
Posted as comment-as-flag by Nguyen Ngoc Nghiem:
this answer was a great help for this problem

Sign in to comment.

Categories

Products

Release

R2023a

Asked:

on 27 Feb 2024

Commented:

on 7 Feb 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!