MATLAB Answers

Matlab
0

Extract Structure element dynamically

Matlab
さんによって質問されました 2019 年 11 月 1 日
最新アクティビティ Matlab
さんによって コメントされました 2019 年 11 月 2 日
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 件のコメント

サインイン to comment.

2 件の回答

回答者: Turlough Hughes 2019 年 11 月 1 日
 採用された回答

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 件のコメント

Turlough Hughes 2019 年 11 月 1 日
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');
Matlab
2019 年 11 月 1 日
Super thanks a ton!! Works well
Matlab
2019 年 11 月 2 日
Can you please help me in getting the a GUI as well ?

サインイン to comment.


Fangjun Jiang
回答者: Fangjun Jiang
2019 年 11 月 1 日

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

  0 件のコメント

サインイン to comment.



Translated by