How can i plot a structure array?
显示 更早的评论
Hello all,
I have a structure array containing multiple trials. I would like to plot the singl trials, but change the trials with the arrows (so that I don't have to give the single command). I wrote this code:
for b= 1:length(fields_trials)
plot (Trials.(['a_' int2str(a)]));
end;
3 个评论
Azzi Abdelmalek
2016-4-8
You wrote the code, and?
Fabio Castro
2016-4-8
@Fabio Castro: rather than using dynamic fieldnames, you should consider using a non-scalar structure. Using a non-scalar structure will make your code much simpler:
S(1).trial = [1,2,3];
S(2).trial = [4,5,6];
S(3).trial = [7,8,9];
Then accessing the contents of the structure is really simple:
>> S(1).trial % one element
ans =
1 2 3
>> vertcat(S.trial)
ans =
1 2 3
4 5 6
7 8 9
And you can use indexing to access any elements of the array:
>> vertcat(S([false,true,true]).trial)
ans =
4 5 6
7 8 9
Using a non-scalar array would make your code simpler, faster, and less buggy. You shoudl try it.
回答(1 个)
Walter Roberson
2016-4-8
编辑:Walter Roberson
2016-4-8
for b= 1:length(fields_trials)
plot (Trials.(['a_' int2str(a)]));
hold on
end
6 个评论
Walter Roberson
2016-4-8
编辑:Walter Roberson
2016-4-8
If all of the fields are vectors of the same number of data points, and you want to plot all of the fields in the structure, then you can be more efficient.
cols = cellfun(@(C) C(:), struct2cell(Trials), 'Uniform', 0);
y = horzcat(cols{:});
plot(y)
Fabio Castro
2016-4-8
Walter Roberson
2016-4-8
Is it possible that the range of values is fairly different between the fields? If so then,
for b= 1:length(fields_trials)
plot (Trials.(['a_' int2str(b)]));
hold on
end
set(gca, 'xlimmode', 'auto', 'ylimmode', 'auto')
Note, by the way, the correction of int2str(a) to int2str(b). I would suggest coding
for b = 1 : length(fields_trials)
plot( Trials.(sprintf('a_%d',b)) );
hold on
end
set(gca, 'xlimmode', 'auto', 'ylimmode', 'auto')
And if you really wanted to get fancy:
hold on
structfun(@plot, Trials, 'Uniform', 0);
set(gca, 'xlimmode', 'auto', 'ylimmode', 'auto')
Fabio Castro
2016-4-8
Walter Roberson
2016-4-8
Is there to be one subplot per field? Or do you want something like a waterfall plot?
Fabio Castro
2016-4-8
类别
在 帮助中心 和 File Exchange 中查找有关 Creating, Deleting, and Querying Graphics Objects 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!