MATLAB Answers

Trouble with findpeaks - 14 EEG signals and peaks on same plot - different colors

조회 수: 1(최근 30일)
Christina Diersing
Christina Diersing 2021년 7월 13일
댓글: dpb 2021년 7월 14일
Hi,
I am trying to plot 14 EEG signals and their peaks on the same plot, but I am having trouble getting all of the findpeaks to have the triangle symbol in the same color as the EEG signal. Rather than have matching colors, and have all findpeaks have the triangle symbol, I keep getting a legend like this:
Is there a way I can get them to match colorwise and to make all of the findpeaks have the triangle symbol? I've attached a zip folder containing my matlab code and the csv file (this figure's code starts at line 36).
Also, I know it won't be easily legible with all 14 signals and peaks on the plot. I plan to add and remove certain signals as I need to, but I'd like to have all 14 signals on the same plot to start with.
Secondary Request:
If possible, I'd like to have the peaks on the right column of the legend and the EEG signals on the left column. Also, is there a way I can title a legend column?
Thank you for your help!
  댓글 수: 3
dpb
dpb 2021년 7월 14일
I did not see the above plaintive cry in the wilderness until now...sorry!
>> tTry.Properties.VariableNames(2:end)=extractAfter(tTry.Properties.VariableNames(2:end),'_');
>> head(tTry)
ans =
8×15 table
Timestamp AF3 F7 F3 FC5 T7 P7 O1 O2 P8 T8 FC6 F4 F8 AF4
_____________ _______ _______ _______ _______ _______ _______ _______ _______ _______ _______ _______ _______ _______ _______
1622835751.19 4260.38 4267.69 4316.03 4305.51 4340.00 4278.46 4278.97 4279.62 4235.26 4184.87 4456.67 4401.79 4343.59 4387.05
1622835751.20 4264.87 4261.92 4311.79 4308.59 4338.97 4280.26 4279.74 4276.79 4232.18 4184.74 4442.69 4401.54 4334.23 4380.77
1622835751.20 4266.28 4272.05 4316.41 4312.56 4340.51 4280.77 4286.41 4275.77 4229.62 4178.33 4438.21 4405.38 4325.26 4381.03
1622835751.21 4262.82 4274.74 4319.74 4311.28 4342.44 4280.77 4288.21 4281.41 4242.82 4181.28 4444.87 4407.82 4330.64 4389.49
1622835751.22 4266.15 4267.56 4318.85 4308.08 4332.56 4279.23 4282.31 4285.64 4248.59 4186.03 4448.72 4404.23 4333.72 4392.31
1622835751.23 4266.92 4267.95 4317.69 4298.33 4322.95 4277.95 4275.77 4275.13 4235.00 4179.87 4440.77 4398.97 4326.28 4386.92
1622835751.24 4255.26 4269.49 4309.87 4293.21 4328.08 4278.08 4270.13 4265.38 4229.62 4177.95 4425.51 4394.49 4325.26 4383.33
1622835751.24 4254.87 4265.13 4306.54 4303.33 4336.54 4280.13 4267.82 4272.44 4242.95 4184.74 4431.79 4397.05 4328.21 4382.18
>>

댓글을 달려면 로그인하십시오.

채택된 답변

dpb
dpb 2021년 7월 13일
편집: dpb 2021년 7월 14일
T.Timestamp=T.Timestamp-T.Timestamp(1); % 1622835751.18846;
varlist={'AF3','F7','F3','FC5','T7','P7','O1','O2','P8','T8','FC6','F4','F8','AF4'};
%% Reg Plot - all EEG Signals and peaks on same plot
hF1=figure('Name', 'EEG Signals and Peaks - Same Plot');
newcolors={'#0072BD','#D95319','#EDB120','#7E2F8E','#77AC30','#4DBEEE','#A2142F', ...
'#FF0000','#00FF00','#0000FF','#00FFFF','#FF00FF','#FFFF00','#000000'};
colororder(newcolors);
grid on; hold on;
for i=1:numel(varlist)
ix=find(matches(extractAfter(tTry.Properties.VariableNames,'_'),varlist(i))); % get the wanted variable in list order
findpeaks(T{:,ix}, T.Timestamp,'MinPeakProminence',100); % draw the findpeaks plot
end
hAx=gca; hL=hAx.Children; % retrieve handles to lines
hLG=legend([hL(2:2:end);hL(1:2:end)],[varlist strcat(varlist,' Peaks')], 'NumColumns', 2); % write legend in desired order
hLG.FontSize=7; hLG.Location='best';
title('Try 4 EEG Test');
xlabel('Timestamp (s)');
ylabel('EEG Value (uV)');
fig1.WindowState = 'maximize';
results in
where just a little frontend effort lets one reduce some 14 calls to a loop of 4 lines that can be arranged in whatever order is later desired if ever want to change simply by reordering one array of names as well as elminate the difference in colors owing to extra uneeded call to plot.
The legend is rearranged as desired simply by reordering the order of the handles passed; like everything else in MATLAB, the default order is by column and findpeaks puts the peaks line first where the desire is to have the solid line first instead. One could do it by rearranging the handle array order; I just took the expedient of passing the two sets in the desired order to legend directly.
  댓글 수: 1
dpb
dpb 2021년 7월 14일
"The legend is rearranged as desired simply by reordering the order of the handles passed;"
Since the channel is given in the first column, if it were me I think I'd just use 'Peaks' for the second column of the legend to reduce the clutter slightly instead of duplicating the channel ID....

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

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

Start Hunting!

Translated by