How to subplot a structure array in a single window
2 次查看(过去 30 天)
显示 更早的评论
Hello,
I as result of an analysis of some trials, I have a structure array containing all the trials. I want to subplot all the trials in a single window, so that I can have all the trials at one. I wrote this rather inefficient and time consuming code:
subplot(6,6,1),plot(Trials.a_2), title('T2')
subplot(6,6,2),plot(Trials.a_3), title('T3')
subplot(6,6,3),plot(Trials.a_4), title('T4')
subplot(6,6,4),plot(Trials.a_5), title('T5')
subplot(6,6,5),plot(Trials.a_6), title('T6')
subplot(6,6,6),plot(Trials.a_7), title('T7')
subplot(6,6,7),plot(Trials.a_8), title('T8')
subplot(6,6,8),plot(Trials.a_9), title('T9')
subplot(6,6,9),plot(Trials.a_10), title('T10')
subplot(6,6,10),plot(Trials.a_11), title('T11')
subplot(6,6,11),plot(Trials.a_12), title('T12')
subplot(6,6,12),plot(Trials.a_13), title('T13')
subplot(6,6,13),plot(Trials.a_14), title('T14')
subplot(6,6,14),plot(Trials.a_15), title('T15')
subplot(6,6,15),plot(Trials.a_16), title('T16')
subplot(6,6,16),plot(Trials.a_17), title('T17')
subplot(6,6,17),plot(Trials.a_18), title('T18')
subplot(6,6,18),plot(Trials.a_19), title('T19')
subplot(6,6,19),plot(Trials.a_20), title('T20')
subplot(6,6,20),plot(Trials.a_21), title('T21')
subplot(6,6,21),plot(Trials.a_22), title('T22')
subplot(6,6,22),plot(Trials.a_23), title('T23')
subplot(6,6,23),plot(Trials.a_24), title('T24')
subplot(6,6,24),plot(Trials.a_25), title('T25')
subplot(6,6,25),plot(Trials.a_26), title('T26')
subplot(6,6,26),plot(Trials.a_27), title('T27')
subplot(6,6,27),plot(Trials.a_28), title('T28')
subplot(6,6,28),plot(Trials.a_29), title('T29')
subplot(6,6,29),plot(Trials.a_30), title('T30')
subplot(6,6,30),plot(Trials.a_31), title('T31')
subplot(6,6,31),plot(Trials.a_32), title('T32')
subplot(6,6,32),plot(Trials.a_33), title('T33')
subplot(6,6,33),plot(Trials.a_34), title('T34')
The problem I am having is that for different subjects, different numbers of trials and different names of the variable "Trials.a_n", so I have to change manually the names of both the title and the variable "Trails.a_n". I have a cell array called "fields_trials" containing all the names of the trials.
I have tried to create a for loop, but it doesn't work:
for i =1:length(fields_trials{a})
subplot(6,6,i)
plot(MeanDiff.(fields_trials{a})(:,i)), Title (fields_trials{a})
end
What am I doing wrong?
Thank you very much in advance
1 个评论
Jan
2017-1-20
"It doesn't work" is a weak description of the problem. The readers have to guess, what happens. Please avoid this expression, because it might readers drive crazy, if they want to help, but the problem is kept as a secret. :-)
回答(1 个)
Jan
2017-1-20
编辑:Jan
2017-1-20
Don't do this.
Do not hide an index in the field names. Using an index as index is much smarter and you will not get such troubles. If the fields are written as an array, the loop is trivial: Trials.a{2} instead of Trials.a_2. Can you change the code, which creates the struct accordingly? If it is not possible, e.g. if it is not your code, ask the author to do so. And if it is really really not possible to change the code, use this:
Fields = fieldnames(Trials);
for i = 1:length(Fields)
subplot(6,6,i);
plot(Trials.(Fields{i})));
Str = strrep(Fields{i}, 'a_', 'T');
title(Str);
end
PS. The code you've posted is confusing
- Where does "MeanDiff" come from suddenly?!
- What is "a" in fields_trials{a})(:,i) and what is the purpose of (:,i) here?
- Title () is not the same as title(), because the case matters in Matlab.
- Why is 'T2' now replaced by the field name?
1 个评论
Stephen23
2017-1-20
Trials(1).a = ...
Trials(2).a = ...
etc
And if a would be the only field then replacing the whole structure with a cell array or an ND numeric array would likely be the best solution.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Phased Array Design and Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!