# How can I save the total number of each selection from a listdlg using num2str?

조회 수: 24(최근 30일)
Jose Rego Terol 22 Jan 2020 19:50
편집: Jose Rego Terol 25 Jan 2020 18:19
Hi all,
I want to display how many times each choice of a list has been selected in the xlabel plot.
This is the code for the xlabel:
f1=figure(1);
set(f1,'units','normalized','position',[0 0 1 1],'NumberTitle','on','ToolBar', 'None');
f1.WindowState = 'maximized';
hold on;box on; grid on;
plot(x,y,'b');
ylabel('Amplitud (pA)');
xlabel(['Time (s)' ' foot-Spike: ' num2str(mNum) ' Another event (Flicker): ' num2str(mNum)...
' Spike (Kiss&Run): ' num2str(mNum) ' Null event: ' num2str(mNum) ])
axis([x(1) x(length(x)) min(abs(y)) max(y)]); % Update plot
title('Select two points around a ROI', 'interpreter','none');
ylim([-100 200]);
This is the code for the list:
list = {'Foot Signal of the current spike','Another event (Flicker)',...
'Spike (Kiss&Run)','Null event','Redo de selecction'};
result = listdlg('PromptString',{'So far ' num2str(mNum) ' regions were measured'}, 'SelectionMode','single','ListString',list);
if result==1
mNum = mNum+1;
save([mainDir 'Spike No' num2str(mNum,'%d') '.mat'], 'T','I')
elseif result==2
mNum = mNum+1;
save([mainDir 'Flicker No%d' num2str(mNum,'%d') '.mat'], 'T','I');
elseif result==3
mNum = mNum+1;
save([mainDir 'Spike Kiss&Run' num2str(mNum,'%d') '.mat'], 'T','I');
...
end
When I write, for example, num2str(list{1}), Matlab says Undefined variable list. I tried almost every option but I cannot get the solution.
I guess the problem is that list is a string. Therefore, num2str is not correct, but I am not sure.
Update:
I set the varible list as a global variable
global list
I've change the xlabel code:
xlabel(['Time (s)' ' foot-Spike: ' num2str(list==1)])
And this is the Matlab error:
Undefined operator '==' for input arguments of type 'cell'.
Error in spikes_detection_listdlg (line 34)
xlabel(['Time (s)' ' foot-Spike: ' num2str(list==1)])
May you help me?
Update (25.01.2020):
I found the way to add +1 at each spike type at the xlabel, BUT after the first slection, the counter reset. Therefore, the num2str does not exceed number 1.
global fs
global fl
global KnR
global null
f1=figure(1);
set(f1,'units','normalized','position',[0 0 1 1],'NumberTitle','on','ToolBar', 'None');
f1.WindowState = 'maximized';
hold on;box on; grid on;
plot(x,y,'b');%axis tight;
ylabel('Amplitud (pA)');
xlabel(['Time (s)' 'foot-Spike: ' num2str(fs) ' Flicker:' num2str(fl)])
axis([x(1) x(length(x)) min(abs(y)) max(y)]); % Update plot
list = {'Foot Signal of the current spike','Another event (Flicker)',...
'Spike (Kiss&Run)','Null event','Redo de selecction','Close all'};
result = listdlg('PromptString',{'So far ' num2str(mNum) ' regions were measured'}, 'SelectionMode','single','ListString',list);
fs=result==1;
fl=result==2;
KnR=result==3;
null=result==4;
if result==1
mNum = mNum+1;
fs= fs+1;
save([mainDir 'Spike No' num2str(mNum,'%d') '.mat'], 'T','I')
elseif result==2
mNum = mNum+1;
fl=fl+1;
save([mainDir 'Flicker No%d' num2str(mNum,'%d') '.mat'], 'T','I');
elseif result==3
mNum = mNum+1;
KnR=KnR+1;
save([mainDir 'Spike Kiss&Run' num2str(mNum,'%d') '.mat'], 'T','I');
...
end

로그인 to comment.

### 답변(1개)

KALYAN ACHARJYA 23 Jan 2020 5:33
xlabel(['Time (s)' ' foot-Spike: ',list{i}])
Here i is any number, not larger than length of list

#### 댓글 수: 2

Jose Rego Terol 23 Jan 2020 9:12
Not sure if you understand my problem.
Please, let me reformulate it again.
The list has 5 options: Foot Signal of the current spike, Another event (Flicker), Spike (Kiss&Run), Null event, and Redo de selecction. What I want to do with the code is to count the number of selection of each option and display each value at the xlabel. For example, if the user selects 7 times "Foot Signal of the current spike", I want the code to display the number 7 at the x label where "Foot-spike" is written.
Therefore the codeline you gave me is unnaccurate because {i} is any option of the list. If the user selects the option "Null event", the code should not increase in 1 point the number of Foot-spike for the xlabel linecode. Did you understand the problem better?
Jose Rego Terol 25 Jan 2020 18:07
I change the code:
global fs
global fl
xlabel(['Time (s)' 'foot-Spike: ' num2str(fs) ' Flicker:' num2str(fl)])
list = {'Foot Signal of the current spike','Another event (Flicker)',...
'Spike (Kiss&Run)','Null event','Redo de selecction','Close all'};
result = listdlg('PromptString',{'So far ' num2str(mNum) ' regions were measured'}, 'SelectionMode','single','ListString',list);
fs=result==1;
fl=result==2;
if result==1
mNum = mNum+1;
fs= fs+1;
save([mainDir 'Spike No' num2str(mNum,'%d') '.mat'], 'T','I')
elseif result==2
mNum = mNum+1;
fl=fl+1;
save([mainDir 'Flicker No%d' num2str(mNum,'%d') '.mat'], 'T','I');
Now the flicker selection is counted in the xlabel Flicker, BUT the counter is rest every time I select a new spike. In other words, the code does not save the number of selections.
How can I save all the number of selections?

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.

Translated by