MATLAB Answers

0

Extract Structure element dynamically

Asked by Matlab on 1 Nov 2019
Latest activity Commented on by Matlab on 2 Nov 2019
I have structure whose elements name change dynamically with respect to result file name.
I need an example code which extract structure elements from structure joinedtimetable 'joinedtimetable.Properties.VariableNames'
I need them for plotting the data like
size = numel(joinedtimetable.Properties.VariableNames)
for i = 1:numel(joinedtimetable.Properties.VariableNames)
VariableNames = ExtractName(joinedtimetable.Properties.VariableNames(i);
end
subplot(size,y,i);plot(joinedtimetable.VariableNames(1),joinedtimetable.VariableNames(2));

  0 Comments

Sign in to comment.

2 Answers

Answer by Turlough Hughes on 1 Nov 2019
 Accepted Answer

I would just convert it to a cell array which is easier to index through as you require
c=table2cell(timetable2table(joinedtimetable));
And then something like:
figure, hold on
for ii=1:size(c,2)
plot([c{:,ii}])
end
legend(joinedtimetable.Properties.VariableNames,'Interpreter','none')
How do you want to represent the non numerical data in your plots though??

  6 Comments

This is the first option I was suggesting (updated now that I know what you are trying to plot)
load('matfile.mat')
VariableNames=joinedtimetable.Properties.VariableNames
c=table2cell(timetable2table(joinedtimetable));
endidx = size(joinedtimetable.WeirdDuration,1);
col = 'brckygmb';
figure, hold on
range=(1114-10):1114;
ii=6;
plot([c{range,1}],range,col(mod(endidx,7)+1))
grid on, title(VariableNames(1,ii-1)), xlabel('TestTime[sec]'), ylabel('Message')
text([c{range,1}],range,c(range,ii),'Interpreter','none');
Second option.
load('matfile.mat')
VariableNames=joinedtimetable.Properties.VariableNames
endidx = size(joinedtimetable.WeirdDuration,1);
col = 'brckygmb';
figure, hold on
range=(1114-10):1114;
ii=5 % Duration data is not identified with a variable, so the first variable in joinedtimetable
% is in fact log_test_that1_test_that
plot(joinedtimetable.WeirdDuration(range),range,col(mod(endidx,7)+1))
grid on, title('servo-v4-uart'), xlabel('TestTime[sec]'), ylabel('Message')
text(joinedtimetable.WeirdDuration(range),range,joinedtimetable.(VariableNames{1,ii})(range),'Interpreter','none');
Super thanks a ton!! Works well
Can you please help me in getting the a GUI as well ?

Sign in to comment.


Answer by Fangjun Jiang
on 1 Nov 2019

%%
s.a=1:10;
s.b=rand(1,10);
EleNames=fieldnames(s);
plot(s.(EleNames{1}),s.(EleNames{2}));

  0 Comments

Sign in to comment.